我正在使用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
,但它说它已经在摘要周期内。 最佳答案
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
,因为您无需更改引用,只需对其进行更新即可。