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

问题描述 投票:0回答:1

介绍

我正在使用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)中包装新值赋值的一种方法,但我认为这并不酷。这样做的正确方法是什么?

谢谢!

angularjs angularjs-scope
1个回答
1
投票

你可以在复选框上使用ngChange指令来启动正确的行为,而不是$ scope.watch。来自文档:

仅当输入值的更改导致将新值提交给模型时,才会评估ngChange表达式。

它不会被评估:

  • 如果$ parsers转换管道返回的值没有改变
  • 如果输入继续无效,因为模型将保持为空
  • 如果以编程方式更改模型,而不是更改输入值
© www.soinside.com 2019 - 2024. All rights reserved.