我正在尝试理解有趣的情况。在表面上一切正常,但我必须在函数中调试一些东西并注意到它被多次调用(确切地说是5次),即使我只在一个地方使用它。我在视图中有这个标记,它设置输入字段的最大长度。
<div class="name-field">
<input placeholder="ID" type="text" id="form_ID" name="searchId" autofocus
data-ng-model="vm.searchCriteria.searchId" data-ng-required="vm.isSearchIdRequired"
data-ng-minlength="1" data-ng-maxlength="{{vm.getMaxLengthForSearchId()}}"
data-ng-class="{'input-error': vm.isSearchIdValid}">
</div>
getMaxLengthForSearchId()
根据选中的某些复选框返回最大长度。我有三个控制器,我注入了我的viewModel,每个视图一个。外视图中包含一个外部视图和两个外部视图。总而言之,在Batarang中我可以在开发人员工具中看到5个范围,包括外部控制器的范围。我不会期望这会针对每个范围进行评估吗?我做错了什么?
Scope 1 (searchCtrl)
Scope 2
Scope 3 (searchFormCtrl)
Scope 4
Scope 5 (searchResultCtrl)
正如我所提到的,这些控制器中的每一个都依赖于searchViewModel。我可以看到它只被实例化了一次,但是函数被调用了5次。请帮助我理解。
答案 0 :(得分:0)
这是一个常见的问题。
在$ digest期间,将评估模板中表达式中引用的任何函数*。
要解决此问题,您需要尽可能预先计算范围属性的值。你可以用ng-change其他事件来做到这一点。
*(几乎所有:它取决于如何设置使用表达式的指令)