javascript - 为什么指令不观察值的变化?

标签 javascript html angularjs

我有一个如下所示的指令:

directive('parcelsCarousel',function () {
    return {
        restrict:'E',
        replace:true,
        transclude:true,
        templateUrl:'/partials/parcels-carousel.html',
        link:function (scope, element, attrs) {
            scope.$watch('favoriteParcelsList', function (favoriteParcelsList) {
                if (scope.favoriteParcelsList != undefined)
                    console.log(scope.favoriteParcelsList.length)
            });
        }
    }
});

我从 Controller 将一个项目推送到 favoriteParcelsList,但 $watch 不运行。 我能以错误的方式做什么?我确信我错过了一些小事情,因为我还有几个具有类似结构的其他指令,并且它们工作得很好。

最佳答案

看到更多代码(最好是实时的,在 plunker 中)肯定是理想的选择,但我怀疑您想要将元素添加到 favoriteParcelsList 并让 AngularJS 拾取这些更改。如果是这样,需要注意的是,默认情况下 $watch 会跟踪对象的身份。如果您想跟踪更复杂对象的内容,您需要使用深度监视。

您可以通过向 $watch 方法提供第三个 bool 参数来指示 AngularJS 深度监视更改(注意末尾的 true):

        scope.$watch('favoriteParcelsList', function (favoriteParcelsList) {
            if (scope.favoriteParcelsList != undefined)
                console.log(scope.favoriteParcelsList.length)
        }, true);

关于javascript - 为什么指令不观察值的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15226722/

相关文章:

javascript - 关于 Angular 1.5 组件生命周期 Hook

javascript - 隐藏/显示所有子 Div - JS

angularjs - AngularJS 路由是否提供对 "breadcrumb views"的支持?

javascript - 当我的结果有限时,如何对API结果进行分页?

javascript - Angular.js 路由不起作用

Javascript 继承和特权函数

javascript - 这段 JavaScript 代码会按照我期望的方式进行垃圾回收吗?

javascript - 在 Python 程序中包装 Canvas 标签 + javascript 的最简单方法?

javascript - 多选和div不显示

javascript - 必需的 `<select>` 输入错误地允许选择默认选项