0

次のようなディレクティブがあります。

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 が実行されません。間違った方法で何ができますか? 同様の構造を持つ他のいくつかのディレクティブがあり、それらは正常に機能するため、何か小さなことが欠けていると確信しています。

4

1 に答える 1

2

favoriteParcelsListより多くのコードを(理想的にはプランカーでライブで)見ることは確かに言うのが理想的ですが、に要素を追加し、 AngularJSにそれらの変更を取得させたいと思います。$watchその場合、デフォルトでオブジェクトのIDを追跡することに注意する必要があります。より複雑なオブジェクトのコンテンツを追跡する場合は、ディープウォッチを使用する必要があります。

メソッドに3番目のブールパラメータを指定することで、変更を詳細に監視するようにAngularJSに指示できます(最後にtrue$watchに注意してください)。

        scope.$watch('favoriteParcelsList', function (favoriteParcelsList) {
            if (scope.favoriteParcelsList != undefined)
                console.log(scope.favoriteParcelsList.length)
        }, true);
于 2013-03-05T14:58:03.363 に答える