2017-07-31 82 views
1

爲什麼一次綁定被調用兩次?Angularjs一次綁定被調用兩次

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

 
app.controller('myCtrl', function($scope) { 
 
    $scope.foo = function() { 
 
     console.log('foo'); 
 
     return 'foo'; 
 
    } 
 
});
<!DOCTYPE html> 
 
<html> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> 
 
    <body> 
 
     <div ng-app="myApp" ng-controller="myCtrl"> 
 
      <span ng-bind="::foo()"></span> 
 
     </div> 
 
    </body> 
 
</html>

這同樣適用於常規的結合(在第一摘要)。

+3

一次綁定並不意味着該函數將不會被評估每個摘要。如果你不想讓它調用,那麼在控制器中運行一次,並設置一個變量來傳遞查看 – charlietfl

+0

同意你的看法。我可以用初步初始化代替。但是從一般的角度來看,如果有很多一次性綁定依賴於某種邏輯,它就沒有用處。 –

+0

好吧,但它創建了什麼問題? – charlietfl

回答

-1

綁定函數將在每個摘要中調用,即使它是一次性綁定。如果你想避免這種情況,那麼使用NgInit來調用一次函數。

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

 
app.controller('myCtrl', function($scope) { 
 
    $scope.foo = function() { 
 
     console.log('foo'); 
 
     return 'foo'; 
 
    } 
 
});
<!DOCTYPE html> 
 
<html> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> 
 
    <body> 
 
     <div ng-app="myApp" ng-controller="myCtrl"> 
 
      <span ng-init="::foo()"></span> 
 
     </div> 
 
    </body> 
 
</html>

+0

如果綁定函數是一次性綁定,則不會在每個摘要中調用綁定函數。 –

0

這是角度的核心問題,閱讀this後,他們對這個問題的詳細討論,他們已經解釋過一次綁定不是我們的思維方式,表達評估可以被多次調用。