更新角度范围而不触发更改事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新角度范围而不触发更改事件相关的知识,希望对你有一定的参考价值。
介绍
我正在使用angular编写复选框树指令。部分行为是当我检查树中间的复选框时,我需要取消设置所有祖先复选框并设置所有后代复选框(参见屏幕截图,透明复选框实际上未经检查)。
https://www.dropbox.com/s/yx1bzqsamunmjpx/Screenshot%20from%202014-08-25%2018%3A39%3A44.png?dl=0
我正在使用:
itemScope.$watch('checked', function setCheckboxes(newValue, oldValue) { ... });
对于后代一切都很好。我为每个孩子复选框并设置一个新值,然后为他们的后代激发事件,依此类推。
问题在于祖先。如果我将父checked
值设置为false,则会触发将所有子项设置为false的事件,这是不需要的。
问题从这里开始:
我需要找到一种更新(祖先复选框)模型的方法,而不会触发我使用$watch
订阅的事件。我知道在setTimeout(fn, 1)
中包装新值赋值的一种方法,但我认为这并不酷。这样做的正确方法是什么?
谢谢!
答案
你可以在复选框上使用ngChange指令来启动正确的行为,而不是$ scope.watch。来自文档:
仅当输入值的更改导致将新值提交给模型时,才会评估ngChange表达式。
它不会被评估:
- 如果$ parsers转换管道返回的值没有改变
- 如果输入继续无效,因为模型将保持为空
- 如果以编程方式更改模型,而不是更改输入值
以上是关于更新角度范围而不触发更改事件的主要内容,如果未能解决你的问题,请参考以下文章
在mat-sidenav组件的'closing'事件中更改状态时,角度动画不会触发?