我发现当我使用ng-include
时,它会经常被调用。
每次单击其中一个Nothing
按钮或更改视图,或在输入框中键入内容时,getView
都会多次运行。更改视图时最多6次。基本上做任何改变$scope
的事情都会产生对getView
的调用。
我创建了一个plunker来显示我正在描述的行为:plnkr.co
这是正常行为吗?有没有办法让它只运行一次?我担心因此可能会失去表现。
我的代码:
的index.html
<body ng-app="includeExample">
<div ng-controller="ExampleController">
<div class="row">
<input type="text" ng-model="unrelated">
</div>
<div class="row">
<tabset>
<tab heading="View 1">
<ng-include src="getView('template1')"></ng-include>
</tab>
<tab heading="View 2">
<ng-include src="getView('template2')"></ng-include>
</tab>
</tabset>
</div>
</div>
</body>
的script.js
angular.module('includeExample', ['ngAnimate', 'ui.bootstrap'])
.controller('ExampleController', ['$scope',
function($scope) {
$scope.getView = function(filename) {
console.log("getView " + new Date());
return filename + ".html";
};
}
]);
Template1.html
Content of template1.html
<button type="button" class="btn btn-primary" ng-click="">Nothing</button>
答案 0 :(得分:3)
Angular每次运行摘要时都会调用getView
方法,以确保值没有更改。这是角度如何将模型和视图结合在一起的“神奇”的一部分。如果查看开发工具的网络选项卡,您将看到每次运行摘要时浏览器实际上都没有检索模板。知道摘要实际上是这样的 - 你应该开发相应的代码,在不直接绑定到视图的方法中运行密集操作!
有关摘要本身的更多信息,请参阅:
希望有所帮助!
答案 1 :(得分:1)
是的,每当你做任何事情时,angularJS都会经过getView()
。一个好的第一次迭代是将它分配给json对象而不是使用get
方法。实际上,如果你不在html中使用任何get
类型的方法,那会更好。然后,如果您真的希望它不会更改,您可以删除双向绑定(Render value without data-binding)。