$ watch没有被解雇

时间:2015-07-17 13:09:26

标签: javascript angularjs angularjs-directive angularjs-watch

我正在使用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,但它说它已经在摘要周期内了。

1 个答案:

答案 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); ,因为您没有更改引用,只是更新它。