ScrollSpy の AngularJS 実装(元の記事はこちら) のコードを使用していますが、ナビゲーションが動的に作成されたときに問題が発生しましたが、ナビゲーションが静的に作成されたときには機能します。
したがってscrollSpy
、のリストを監視するディレクティブがありspies
ます。spies
リストは基本的に、ユーザーがページをスクロールするときに強調表示するナビゲーション要素のリストです 。そのようにコントローラのメソッドをspies
介して追加されますaddSpy
scrollSpy
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
ましたが、既にダイジェスト サイクル内にあると表示されました。