0

ScrollSpy の AngularJS 実装(元の記事はこちら) のコードを使用していますが、ナビゲーションが動的に作成されたときに問題が発生しましたが、ナビゲーションが静的に作成されたときには機能します。

したがってscrollSpy、のリストを監視するディレクティブがありspiesます。spiesリストは基本的に、ユーザーがページをスクロールするときに強調表示するナビゲーション要素のリストです 。そのようにコントローラのメソッドをspies介して追加されますaddSpyscrollSpy

controller: function ($scope) {
    $scope.spies = [];
    return this.addSpy = function (spyObj) {
        return $scope.spies.push(spyObj);
    };
},

関数は常に呼び出されaddSpyますが、スパイを動的に追加すると、そのリストの $watch は起動されず、ナビゲーション項目が静的に作成されたときに起動されます。

link: function (scope, elem, attrs) {
    scope.$watch('spies', function (spies) {
        // I never get called when spies are added dynamically, even 
        // though spies are added to the $scope.spies object in the controller!
    }

$watch が起動されない理由を理解できる人はいますか? 追加しようとし$scope.$applyましたが、既にダイジェスト サイクル内にあると表示されました。

4

1 に答える 1

1
scope.$watch('spies', function (spies) {
    // I never get called when spies are added dynamically, even 
    // though spies are added to the $scope.spies object in the controller!
}, true);

参照を変更するのではなく、更新するだけなので、最後に取り組む,true必要があります。

于 2015-07-17T13:11:20.393 に答える