0

我正在使用来自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它,但它说它已经在消化周期内。

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 回答