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(){…})