首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当控制器/$作用域被销毁时,如何解除绑定外部事件?

当控制器/$作用域被销毁时,如何解除绑定外部事件?
EN

Stack Overflow用户
提问于 2013-03-17 19:25:05
回答 2查看 7.4K关注 0票数 19

假设我有一个用于呈现为ng-view的页面的控制器。

此控制器绑定到外部源(如应用程序范围的消息总线)的某些事件,以更新其模型。这基本上是非常简单的:

代码语言:javascript
复制
function MyController ($scope) {
  $scope.bar = '…';

  externalSource.on('foo', function (data) {
    $scope.$apply(function () {
      $scope.bar = data.bar;
    });
  });
}

问题是:一旦与控制器关联的视图不再显示,我如何解除与外部源的绑定?

有没有像dispose事件之类的东西?

或者我的方法是完全错误的,我应该以其他方式处理类似的事情?如果是这样的话,是怎么做的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-18 00:15:34

要在控制器的作用域被销毁时执行事件unbind,请使用:

$scope.$on('$destroy', function () { /* Unbind code here */ });

有关更多信息,请参阅Scope文档

票数 35
EN

Stack Overflow用户

发布于 2013-03-17 22:58:34

使用$routeChangeStart或$routeChangeSuccess事件:

代码语言:javascript
复制
function MyController ($scope) {
  $scope.bar = '…';

  externalSource.on('foo', function (data) {
    $scope.$apply(function () {
      $scope.bar = data.bar;
    });
  });

  $scope.$on('$routeChangeStart', function(next, current){
    // unregister listener
    // externalSource.off ....
  });
}

..。或$destroy事件:

代码语言:javascript
复制
  $scope.$on('$destroy', function(){
    // unregister listener
    // externalSource.off ....
  });
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15460222

复制
相关文章

相似问题

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