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

时间:2014-08-25 14:55:28

标签: angularjs angularjs-scope

简介

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

不会评估:

  • 如果$ parsers转换管道返回的值未更改
  • 如果输入继续无效,因为模型将保持为空
  • 如果以编程方式更改模型而不是更改输入值