简介
我' 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)
中包装新值赋值的一种方法,但我认为它并不酷。这样做的正确方法是什么?
谢谢!
答案 0 :(得分:1)
您可以使用复选框上的ngChange指令启动正确的行为,而不是$ scope.watch。来自文档:
仅当输入值的更改导致将新值提交给模型时,才会评估ngChange表达式。
不会评估: