更新角度范围而不触发更改事件

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转换管道返回的值没有改变
  • 如果输入继续无效,因为模型将保持为空
  • 如果以编程方式更改模型,而不是更改输入值

以上是关于更新角度范围而不触发更改事件的主要内容,如果未能解决你的问题,请参考以下文章

清除 select2 而不触发更改事件

角度单击事件处理程序未触发更改检测

角度 2(更改)事件未触发

在mat-sidenav组件的'closing'事件中更改状态时,角度动画不会触发?

powershell 更改列表项而不更改修改的by和date并且不触发spitem事件接收器的示例。

触发 React 渲染输入的更改事件(类型=范围)