2015-10-03 63 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

真的很有趣,看結果表達式,像!謝謝Radim! –

+0

任何想法如何解決這個問題? –

+0

有很多方法。真。因爲它取決於你的需求,你想達到的效果。例如。如果你只需要評估一次,你可以試試這個http://blog.thoughtram.io/angularjs/2014/10/14/exploring-angular-1.3-one-time-bindings.html和語法'{{: :myTest()}}' –