我正在使用AngularJS implementation of ScrollSpyoriginal 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,因为您无需更改引用,只需对其进行更新即可。

09-25 19:21