use*_*057 1 directive angularjs
这是Angular中的错误还是我遗漏了一些东西:
从指令的模板调用函数表明该函数执行了11次!用templateurl,22次!! 用字符串模板.
angular.module('testDirective', [])
.directive('myDirective', function() {
return {
scope:{},
template: '{{increment()}} {{count}}',
controller: function($scope) {
$scope.count = 0;
$scope.increment = function() {
$scope.count += 1;
};
}
};
})
Run Code Online (Sandbox Code Playgroud)
HTML:
<body ng-app="testDirective">
<my-directive></my-directive>
</body>
Run Code Online (Sandbox Code Playgroud)
结果:
22
Run Code Online (Sandbox Code Playgroud)
这是一个包含template和templateUrl方法的Plunker.
例如,当在转发器中涉及方法调用时,这是一个非常严重的问题,这最终会在相同的方法上调用相同的方法.
有人可以对此有所了解吗?
{{increment()}}在你的视图中,每次调用摘要周期时都会调用它,就像任何绑定表达式一样.如果您正在增加控制器函数本身,而不是从视图模板调用的绑定函数,则表明该指令多次"加载".但Angular的本质是任何绑定表达式都将在摘要周期中反复检查更改,并且您希望只发生一次(甚至可预测次数)的任何内容都不应该发生在绑定到内容的表达式中元件.另一方面,绑定到事件处理程序的表达式仅在事件触发时执行.
该模型需要一些时间来习惯.虽然旧文档反对它,但您可以在内容绑定表达式中使用函数,但它们永远不应更改状态.你无法真正控制何时调用$ digest(),如果你正在以Angular的方式思考,你将不会想要.