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

functions with ControllerAs pattern are called multiple times

本文关键字:调用 函数 ControllerAs 模式 具有      更新时间:2023-09-26

我按照angularjs样式指南中的"控制器作为"用法创建了一个控制器,其中有一个可以从视图调用的功能(例如ng-if)。但是当我调用该函数时,似乎它被调用了三次,但我不知道它是怎么发生的。这是JSBin链接

(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>

您无法

控制计算 {{binding}} 中使用的表达式的次数。AngularJS每次认为它们的值可能已经改变时都会重新评估它们。换句话说,如果表达式包含函数调用,则每隔$digest调用一次。

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