【发布时间】:2013-02-22 15:30:14
【问题描述】:
我正在尝试实现ng-show 和ng-hide 的动画版本;我最初尝试使用jQueryUI.toggle('slide', …),但由于$watch 多次触发,我的元素会切换,然后立即切换(有时不止一次)。但我在 AngularJS 的 github 问题中看到这是 $watch 的预期行为(脏检查)。
所以我想,好吧,这个小效果——你该死,我会明确地显示或隐藏而不是简单的切换:我分解它来检查 $watch 的 newValue 的值,如下所示:
scope.$watch(condition, function myShowHideAction(newValue,oldValue) {
if ( newValue !== oldValue ) {
if (newValue) {
elm.show("slide", { direction: direction }, "slow");
} else {
elm.hide("slide", { direction: direction }, "slow");
}
}
}
启动它,我看到了什么?切换!
在输入一些控制台日志后,我发现我的条件值在 $watch 循环期间以某种方式发生了变化(它迭代了 6 次而不是仅仅一次,但这不应该在这里也不应该在那里)。但是,实际范围参数的值不会像newValue 那样在中途改变(因为它不应该改变)。
这到底是怎么回事?
【问题讨论】: