Events 当控制器/$scope被销毁时,如何解除外部事件的绑定?

Events 当控制器/$scope被销毁时,如何解除外部事件的绑定?,events,controller,angularjs,Events,Controller,Angularjs,假设我有一个用于呈现到ng视图中的页面的控制器 此控制器绑定到外部源(如应用程序范围的消息总线)的某些事件以更新其模型。这基本上非常简单: function MyController ($scope) { $scope.bar = '…'; externalSource.on('foo', function (data) { $scope.$apply(function () { $scope.bar = data.bar; }); }); } 问题是

假设我有一个用于呈现到
ng视图中的页面的控制器

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

function MyController ($scope) {
  $scope.bar = '…';

  externalSource.on('foo', function (data) {
    $scope.$apply(function () {
      $scope.bar = data.bar;
    });
  });
}
问题是:一旦不再显示控制器关联的视图,如何从外部源解除控制器绑定

是否存在
dispose
事件或类似事件


还是我的方法完全错误,我应该以其他方式处理类似的事情?如果是,如何使用?

使用$routeChangeStart或$routeChangeSuccess事件:

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
事件:

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

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

$scope.$on(“$destroy”,函数(){/*Unbind code here*/})


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

如果使用jQuerys on('event',…)方法,您只需取消('event')即可删除事件。还是我搞错了?这不是一个特别的安格拉斯问题。这取决于您使用的外部事件资源。是的。我知道如何解绑,但不知何时何地解绑。这取决于控制器的生命周期,这当然与AngularJS有关。我想你指的是('$destroy',function(){…})