【问题标题】:$scope.$watch not raising events inside a ui.bootstrap.modal controller$scope.$watch 不在 ui.bootstrap.modal 控制器中引发事件
【发布时间】:2014-04-15 14:20:23
【问题描述】:

我正在为 Angular 使用 UI 引导程序,并且我已将 ui.bootstrap.modal 组件集成到我的解决方案中。除了一件事,一切都很好。我已经设置了一个 $scope.$watch 来监控位于模式后面的控制器上特定属性的更改,但是,当属性更改时它不会触发。

我已经在plunkr转载了

如您所见,它会在模式打开时触发一次,但不会在您更改 UI 中的复选框值时触发。乍一看,绑定看起来不错,因为更新一个复选框会更新另一个复选框(两者都绑定到相同的属性)。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: javascript angularjs angular-ui-bootstrap


    【解决方案1】:

    Angular $watch statements 总是至少触发一次以设置绑定

    在观察者注册到作用域后,监听器 fn 是 异步调用(通过 $evalAsync)来初始化观察者。在 在极少数情况下,这是不可取的,因为在调用监听器时 watchExpression 的结果没有改变。检测这种情况 在侦听器 fn 中,您可以比较 newVal 和 oldVal。如果 这两个值是相同的(===)然后监听器被称为到期 初始化。

    您收到有关设置的警报,但它似乎没有绑定任何内容,这就是您没有看到它再次被调用的原因。

    您看到的是由于原型继承和原语导致的 Angular 限制。如果您将其更改为$scope.form = {}; 并将其引用为form.chkVariable,它应该可以按预期工作。

    http://plnkr.co/edit/3hCJ3EM1Gx1fCDSePQfa?p=preview

    【讨论】:

    • 您建议的修复解决了我的问题。非常感谢!
    猜你喜欢
    • 2023-03-26
    • 2016-03-06
    • 2015-02-18
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多