如何在 angular 中使用 controllerAs 语法时监听 $destroy
How to put listen over $destroy while using controllerAs syntax in angular
现在我正在摆脱 $scope
对我的 angular 控制器的依赖,以确保我可以轻松地将我的代码迁移到 Angular2。我当前的 angular 版本是 1.4.X
。
在做同样的事情时,我将 $destroy
侦听器放置在我的控制器范围内,例如 $scope.$on('$destory', function() ....)
.
我可以看到 $on
方法仅在控制器的 $scope
上可用,但如何在不使用 $scope
依赖项的情况下实现它。
经过一些研究,我发现 $destroy
事件是在删除 DOM 时发出的,并且在相同的 DOM 范围内它广播 $destroy
事件,但同时同一时间,该事件已在 DOM
上传播,将被删除。
你知道有一个依赖项 $element
,如果你在控制器中注入它会给你 DOM 你有 ng-controller
指令的地方。所以在你的控制器中注入 $element
然后将监听器放在它上面
$element.on('$destroy', function(){
//write clean up code here
});
Mine solution will work till 1.4.X version. For 1.5.3+ version you
could use Angular lifecycle hook
which is $onDestroy
like shown by
@pgreen2
in above answer. Thanks :)
如果您使用的是 angular 1.5+,他们添加了 lifecycle hooks,您可以在控制器上选择加入。不需要 $scope
。只需将一个名为 $onDestroy()
的函数添加到您的控制器,它将在您的控制器被清理时调用:
$onDestroy()
- Called on a controller when its containing scope is
destroyed. Use this hook for releasing external resources, watches and
event handlers.
示例来自 http://blog.thoughtram.io/angularjs/2016/03/29/exploring-angular-1.5-lifecycle-hooks.html:
function MyCmpController($element) {
var clickHandler = function () {
// do something
};
this.$onInit = function () {
$element.on('click', clickHandler);
};
this.$onDestroy = function () {
$element.off('click', clickHandler);
};
}
现在我正在摆脱 $scope
对我的 angular 控制器的依赖,以确保我可以轻松地将我的代码迁移到 Angular2。我当前的 angular 版本是 1.4.X
。
在做同样的事情时,我将 $destroy
侦听器放置在我的控制器范围内,例如 $scope.$on('$destory', function() ....)
.
我可以看到 $on
方法仅在控制器的 $scope
上可用,但如何在不使用 $scope
依赖项的情况下实现它。
经过一些研究,我发现 $destroy
事件是在删除 DOM 时发出的,并且在相同的 DOM 范围内它广播 $destroy
事件,但同时同一时间,该事件已在 DOM
上传播,将被删除。
你知道有一个依赖项 $element
,如果你在控制器中注入它会给你 DOM 你有 ng-controller
指令的地方。所以在你的控制器中注入 $element
然后将监听器放在它上面
$element.on('$destroy', function(){
//write clean up code here
});
Mine solution will work till 1.4.X version. For 1.5.3+ version you could use Angular
lifecycle hook
which is$onDestroy
like shown by@pgreen2
in above answer. Thanks :)
如果您使用的是 angular 1.5+,他们添加了 lifecycle hooks,您可以在控制器上选择加入。不需要 $scope
。只需将一个名为 $onDestroy()
的函数添加到您的控制器,它将在您的控制器被清理时调用:
$onDestroy()
- Called on a controller when its containing scope is destroyed. Use this hook for releasing external resources, watches and event handlers.
示例来自 http://blog.thoughtram.io/angularjs/2016/03/29/exploring-angular-1.5-lifecycle-hooks.html:
function MyCmpController($element) {
var clickHandler = function () {
// do something
};
this.$onInit = function () {
$element.on('click', clickHandler);
};
this.$onDestroy = function () {
$element.off('click', clickHandler);
};
}