0

我正在尝试实现 and 的动画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但是,实际范围参数的值不会像's一样在中途改变(因为它不应该改变) 。

到底他妈发生了什么?

普朗克

4

1 回答 1

1

发生这种情况的原因是因为您的所有信息框共享相同的范围。如果您console.log(scope)在 mySlide 指令链接函数中添加一个语句,您会看到它在相同范围内创建了多次。因此,您在同一范围内有多个针对相同条件的手表。

恐怕您的代码不是最容易遵循的,但问题似乎在第 87 行的 my-map.js 中。$compile(elm.contents())(scope);您可能应该$compile(elm.contents())(scope.$new());为该信息框创建一个隔离范围,而不是这样做。

于 2013-02-22T07:30:14.967 回答