为什么指令不会观察价值变化?

时间:2013-03-05 14:47:07

标签: 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)
            });
        }
    }
});

我从控制器将项目推送到favoriteParcelsList,但$ watch不会运行。 我能以错误的方式做什么?我确信我错过了一些小东西,因为我有一些其他类似结构的指令,它们工作正常。

1 个答案:

答案 0 :(得分:2)

查看更多代码(理想情况下是直播)可以理所当然地说,但我怀疑您想要向favoriteParcelsList添加元素并让AngularJS获取这些更改。如果需要,则需要注意默认情况下$watch跟踪对象的身份。如果您想跟踪更复杂对象的内容,则需要使用深度监视。

您可以通过向$watch方法提供第三个布尔参数来指示AngularJS深入监视更改(最后注意 true ):

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