angular度范围函数执行多次
我已经在范围上定义了一个函数。 而当我从{{}}中的视图调用它时,它会执行X次。
调节器
function testCtrl($scope) { $scope.myFunc = function(name) { return "Hello " + name; } }
HTML
<div>{{myFunc('Joe')}}</div>
你可以在这个例子中看到它: http : //jsfiddle.net/rbRvD/2/
或与Plunker: http ://plnkr.co/edit/LLQ7cKs2fEoBwv0C5XPE
我猜这是错误的,但为什么执行了这么多次呢?
你的function运行10次。 为什么10? 为什么不是100?
答案在文档中 :
手表听众可能会改变模型,这可能会触发其他听众触发。 这是通过重新运行观察者直到没有检测到改变来实现的。 重新运行的迭代限制是10,以防止无限循环死锁。
当你看到这种情况发生时,这意味着你正在改变模型,Angular必须重新运行摘要并重新启动手表。 在你的特定情况下,你正在调用一个函数来更新一个显示在页面上的计数器。 当计数器值改变时,再次运行摘要,调用更新计数器的函数等。
Angular希望(并且确实鼓励你)改变模型,让视图对这些改变做出反应,而不是相反。
这是预期的行为。 对每个$ digest循环重新评估angular度expression式( {{expression}}
)(有时每个循环多次)。 这意味着expression式应该在计算方面保持轻微。
对于这个问题,expression式评估不应该导致AJAX调用或其他密集或asynchronous操作,或者如果必须的话,应该caching结果。
AngularJs不build议您在渲染时更改范围的模型。 如果你想改变示波器的模型,可以在Controller或者Directive中进行。
将视图视为显示数据的地方(在这种情况下是范围值),数据的所有修改都应该在控制器或指令中。
- 我如何告诉AngularJS“刷新”
- 未能在“DOMWindow”上执行“postMessage”:https://www.youtube.com!== http:// localhost:9000
- 无法到达$ rootScope
- 如何在AngularJs中使用私有方法编写可testing的控制器?
- 在ng-options上使用filter来更改显示的值
- angular度访问多个http调用的数据 – 如何解决承诺
- AngularJS – 访问子范围
- AngularJS + JQuery:如何获得在angularjs中工作的dynamic内容
- 协调Angular.js和Bootstrap表单validation样式