【问题标题】:$watch is not trigger without a complete refresh$watch 不会在没有完全刷新的情况下触发
【发布时间】:2017-07-31 14:01:26
【问题描述】:

我有一个 $watch 设置来监视服务 (MenuFilter) 中的值数组 (menuItems)。

    $scope.filterMenuItems = MenuFilter.menuItems;

    $scope.$watch(function () {
        return MenuFilter.menuItems;
    }, function (newVal, oldVal) {

        if ( newVal !== oldVal ) {
            $scope.filterMenuItems = newVal;
        }
    });

在某个时刻,一个菜单项被删除,我希望手表会更新列表,但事实并非如此。它仅在我刷新页面时更新。

【问题讨论】:

    标签: angularjs watch


    【解决方案1】:

    请务必添加true作为第三个参数,以便深入观察或更好地使用$watchCollection

    问题在于 $watch 仅使用引用比较,即它不监视数组内部的项目 - 仅监视数组引用本身 (oldArray === newArray)。

    【讨论】:

    • 我已经添加了 'true' 但并没有帮助我,尽管它看起来更频繁地触发。在这种情况下如何使用 $watchCollection?
    • 菜单项如何被删除?
    • @Nicholas 你传入的是字符串还是布尔值?
    • true 作为布尔值传入。似乎在删除或添加 menuItem 时,服务中没有触发更新。所以我添加了一个触发器来在删除或添加后更新服务中的数组,现在它工作正常! @MichaelRose 我会将您的答案标记为正确,因为它是最有用的
    • 这就是我想问的问题 - 删除是在角度摘要循环中还是在外部完成;)
    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2015-07-22
    • 2018-10-13
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多