我想在我的所有范围中添加一个destroy侦听器,这样我就可以做一些自定义清理工作了。我不想在我的所有控制器上添加$ scope。$(' $ destroy'),所以我找到了$ provide.decorator方法并尝试了这个:
angular.module('app').config(['$provide', function($provide) {
$provide.decorator('$rootScope', ['$delegate', decorateScope]);
function decorateScope(scope) {
var oldNew = scope.$new.bind(scope);
scope.$new = function() {
var newScope = oldNew(arguments);
console.log('Scope created');
newScope.$on('$destroy', function() {
console.log('Scope destroyed');
});
return decorateScope(newScope);
};
return scope;
}
}
]);
这将以递归方式拦截所有范围的创建。控制台记录所有范围的创建和销毁。但是不像以前那样工作,范围继承链似乎有点破坏了。
怎么能解决这个问题?