2017-07-31 13 views
1

1回のバインディングが2回呼び出されるのはなぜですか?Angularjsの1回のバインディングが2回呼び出される

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

1回のバインディングは、関数がダイジェストごとに評価されないことを意味しません。それが呼び出されないようにするには、コントローラで一度実行して、変数を設定して表示する代わりに – charlietfl

+0

あなたに同意してください。私は予備の初期化に置き換えることができます。しかし、いくつかの論理に依存して1回のバインディングが多い場合、一般的な観点からは有用ではありません。 –

+0

しかし、それはどのような問題を引き起こしますか? – charlietfl

答えて

-1

1回のバインディングであっても、すべてのダイジェストでバインディング関数が呼び出されます。これを避けたい場合は、NgInitを使って関数を一度呼び出す。

+0

1回のバインディングであれば、バインド関数はすべてのダイジェストで呼び出されません。 –

0

この

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>
は角コア内の問題であり、彼らはこの問題について詳細な議論を持っている this記事を読んで、彼らは、式の評価ができ、1時間バインディングは、我々が考える方法ではありません説明しています複数回呼び出すことができます。

関連する問題