0
我有一个有趣的情况,我想了解。表面上一切正常,但我不得不在函数中调试某些东西,并注意到它被多次调用(确切地说是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次。请帮助我理解。
哇,这是角一个隐藏的宝石?如果我打电话给远程服务,它会调用它5次。在任何地方都没有遇到过这种警告,但是我也是在5天前开始使用它,所以这可能是一个常识。 – epitka
好吧,MV *架构会告诉你,你应该使用一个模型来进行视图的状态转换,而你的控制器应该完成所有的“工作”......所以绑定函数到视图应该是真正的避免。在$ scope上放置函数的精妙之处在于,您可以设置ng-click等事件。 –
我看到你在说什么,但是,我使用控制器只是为了与viewmodels连接视图,就是这样。我几乎没有控制器的逻辑。我只需要将它从询问(调用函数)切换到命令式(告诉viewModel将我绑定视图的值更改为) – epitka