Angularjs - $ scope。$ destroy不会删除观察者

时间:2014-12-10 11:57:53

标签: javascript angularjs angularjs-scope

我想弄清楚如何为Angularjs< = 1.2创建我自己的“一次性绑定”。 我找到了这个answer,描述了如何创建自己的bindOnce指令。我确实看到使用以下指令时:

    app.directive('bindOnce', function() {
    return {
            scope: true,
            link: function( $scope ) {
                setTimeout(function() {
                    $scope.$destroy();
                }, 0);
            }
        }
    });

数据绑定一次。 但是,我可以看到$$观察者仍在观看。看看下面的JSBin - 在控制台上运行注释的观察者计数代码将显示观察者仍然活着。

编辑:出于某种原因,当使用角度为1.3的相同指令时,观察者计数dod变为0!

1 个答案:

答案 0 :(得分:-1)

使用cleanup功能删除观察者:

function cleanup(element) 
  { 
  element.off().removeData();

  var injector = currentSpec.$injector;

  element.$injector = null;

  // clean up jquery's fragment cache
  angular.forEach(angular.element.fragments, function(val, key) {
    delete angular.element.fragments[key];
  });

  angular.forEach(angular.callbacks, function(val, key) 
    {
    delete angular.callbacks[key];
    });

  angular.callbacks.counter = 0;
  }

使用自毁服务作为简单绑定一次:

function onetime()
  {
  /*...*/
  onetime = Function;
  }

angular.module('myApp').constant('bindonce', onetime);

angular.module('myApp').controller('foo', function($bindonce){
  this.$inject = '$bindonce';
  $scope.mybind = $bindonce();
} 

使用迁移指南作为参考来查找重大更改:

<强>参考