2015-10-03 2 views
2

Я следующий угловой кодугловой: продублировать в вызове функции контроллера

<!DOCTYPE html> 
<html> 
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> 
<body> 

    <div ng-app="myApp" ng-controller="myCtrl"> 
     Test : {{mytest()}} 
    </div> 

    <script> 
     var app = angular.module('myApp', []); 
     app.controller('myCtrl', function($scope) { 
      $scope.name= "John "; 

      $scope.mytest = function() { 
       console.log('my test'); 
       return 'something'; 
      }; 

     }); 
    </script> 

</body> 
</html> 

Для более подробно, пожалуйста, обратитесь к http://plnkr.co/edit/UIu50AOLMwKIJnAphIB5

Проблема: когда просмотр в браузере Chrome «Осмотрите элемент» консоли, функция ' мой тест 'называется 3 раза! Зачем ?

ответ

2

Потому что вы попросили углового сделать это. Это выражение

{{mytest()}} 

Есть в инструкции факт:

«угловая, не проверить, если значение результата mytest() не меняется И делать это регулярно.».

И угловой проверяет это несколько раз, чтобы убедиться, что он не изменен. А потом, в какой-то другой переварить это будет делать то же самое снова

так, а вызывать этот метод один раз, и пусть Угловая смотреть полученное выражение, как с name выше

{{name}} 
+0

Действительно интересно !! Спасибо, Радим! –

+0

Любая идея, как решить эту проблему? –

+0

Существует много способов. В самом деле. Потому что это зависит от ваших потребностей, от эффекта, который вы хотите достичь. Например. если вам нужно оценить это только один раз, вы можете попробовать этот http://blog.thoughtram.io/angularjs/2014/10/14/exploring-angular-1.3-one-time-bindings.html и синтаксис '{{: : myTest()}} ' –

Смежные вопросы