我遵循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>
答案 0 :(得分:0)
您无法控制评估{{binding}}
中使用的表达式的次数。每当AngularJS认为它们的值可能已经改变时,它们就会重新评估它们。换句话说,如果表达式包含函数调用,则会在每个$digest
上调用它。
这意味着在AngularJS表达式中使用函数调用时,您应该非常关注性能影响。通常,它可以(并且更好)绑定到范围变量。如果你在一个大型应用程序中有这个,$rootScope.$digest
被更频繁地调用,你会看到更多对同一个函数的调用。