2013-04-11 54 views
8

在這個例子中,我得到了2個ng類,每個調用不同的控制器方法,由於某種原因每個方法被調用3次,任何想法?可能的錯誤?angularjs ng類的方法被調用多次

var navList = angular.module('navList', []); 

navList.controller('navCtrl', ['$scope', '$location', function ($scope, $location) { 
    $scope.firstClass = function() { 
     console.log('firstClass'); 
     return 'label label-success' ; 
    };  
    $scope.secondClass = function() { 
     console.log('secondClass'); 
     return 'label' ; 
    };  

}]); 

http://jsfiddle.net/uDPHL/72/

感謝

+0

如果您的目標是爲您的標籤設置條件類,請查看此SO帖子:http://stackoverflow.com/a/15664427/1036025 – jpmorin 2013-04-11 17:01:16

回答

7

這是不是一個錯誤。當Angular編譯類似ng-class="firstClass()"的東西時,它會爲它設置一個$ watch。 Digest循環可以多次評估每個$ watch:

Angular進入$ digest循環。該循環由處理$ evalAsync隊列和$ watch列表的兩個較小的循環組成。 $ digest循環持續迭代,直到模型穩定,這意味着$ evalAsync隊列爲空,$ watch列表不檢測任何更改。 - Overview doc

而且

後一位守望與範圍登記,聽者FN異步調用(通過$ evalAsync)來初始化觀察者。在極少數情況下,這是不可取的,因爲當watchExpression的結果沒有改變時調用監聽器。 - $watch docs

因此,預計至少兩次。