Angularjs一次绑定被调用两次

问题描述:

为什么一次绑定被调用两次?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

绑定函数将在每个摘要中调用,即使它是一次性绑定。如果你想避免这种情况,那么使用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

如果绑定函数是一次性绑定,则不会在每个摘要中调用绑定函数。 –

这是角度的核心问题,阅读this后,他们对这个问题的详细讨论,他们已经解释过一次绑定不是我们的思维方式,表达评估可以被多次调用。