首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angularjs - $scope.$destroy不会删除观察者

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

Stack Overflow用户
提问于 2014-12-10 11:57:53
回答 1查看 406关注 0票数 0

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

代码语言:javascript
复制
    app.directive('bindOnce', function() {
    return {
            scope: true,
            link: function( $scope ) {
                setTimeout(function() {
                    $scope.$destroy();
                }, 0);
            }
        }
    });

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

编辑:由于某些原因,当使用具有角1.3的相同指令时,观察者计数dod更改为0!

EN

回答 1

Stack Overflow用户

发布于 2015-01-15 23:25:11

使用cleanup函数删除观察者:

代码语言:javascript
复制
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;
  }

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

代码语言:javascript
复制
function onetime()
  {
  /*...*/
  onetime = Function;
  }

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

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

使用迁移指南进行参考,可以找到最新的更改:

参考资料

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27400422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档