https://docs.angularjs.org/guide/directive
通过侦听此事件,您可以删除可能导致内存泄漏的事件侦听器.注册到范围和元素的监听器在销毁时会自动清理,但如果您在服务上注册了监听器,或者在未删除的DOM节点上注册了监听器,则必须自行清理或者你冒着引入内存泄漏的风险.
最佳实践:指令应该自行清理.您可以使用element.on('$ destroy',...)或范围.$ on('$ destroy',...)来删除指令时运行清理函数.
题:
element.on "click", (event) ->我的指令里面有一个:
element.on以防止它被垃圾收集?$destroy发出的事件上的事件侦听器.我的印象是destroy()删除了事件监听器,是不是这样?我有暴露模块模式,看起来像这样:
'use strict';
angular.module('app', [])
.directive('myDirective', ['SomeDep', function (SomeDep) {
var linker = function (scope, element, attr) {
// some work
};
return {
link: linker,
restrict: 'E'
};
}])
;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是将$ watch集成到这里.通过'$ window'服务专门观看窗口调整大小.
[编辑]:
我一直意识到我的问题是什么......当我忘记我将它作为属性实现时,我正在限制元素... @ _ @;
我在一个指令中有以下代码,我想确保在销毁范围时清理它.我看过网上以及代码,我想知道如何取消绑定元素.
var window = angular.element($window);
window.bind("resize", function(e){
abc();
});
Run Code Online (Sandbox Code Playgroud)
解:
var abc = function() {};
var window = angular.element($window);
window.bind('resize', abc);
scope.$on('$destroy', function(e) {
window.unbind('resize', abc);
});
Run Code Online (Sandbox Code Playgroud)