我正在使用AngularJS implementation of ScrollSpy(original article here)中的代码,但在动态创建导航时遇到了问题,但在导航静态创建时它确实有用。
所以我有一个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
,但它说它已经在摘要周期内了。
答案 0 :(得分:1)
400
您必须在最后添加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);
,因为您没有更改引用,只是更新它。