具有ControllerAs模式的函数被多次调用

时间:2014-11-21 13:17:34

标签: javascript angularjs angularjs-scope

我遵循angularjs styleguide中的“controller as”用法来创建一个控制器,该控制器中有一个函数可以从视图中调用(例如ng-if)。然而,当我调用该函数时,它似乎被调用了三次,但我不知道它是如何发生的。 这是JSBin link

(function() {
  angular.module('app', []);

  function test() {
    console.log('init');
    var vm = this;
    vm.title = "test title";
    vm.called = function() {
      console.log('get called');
    }
  }

  angular
    .module('app')
    .controller('test', test);

})();
<!DOCTYPE html>
<html ng-app="app">

<head>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>

<body>
  <div ng-controller="test as vm">
    {{ vm.title }} {{ vm.called(); }}
  </div>
</body>

</html>

1 个答案:

答案 0 :(得分:0)

您无法控制评估{{binding}}中使用的表达式的次数。每当AngularJS认为它们的值可能已经改变时,它们就会重新评估它们。换句话说,如果表达式包含函数调用,则会在每个$digest上调用它。

这意味着在AngularJS表达式中使用函数调用时,您应该非常关注性能影响。通常,它可以(并且更好)绑定到范围变量。如果你在一个大型应用程序中有这个,$rootScope.$digest被更频繁地调用,你会看到更多对同一个函数的调用。