拦截所有范围的创建

时间:2015-09-14 09:24:44

标签: angularjs angularjs-scope

我想在我的所有范围中添加一个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;
        }
    }
]);

这将以递归方式拦截所有范围的创建。控制台记录所有范围的创建和销毁。但是不像以前那样工作,范围继承链似乎有点破坏了。

怎么能解决这个问题?

0 个答案:

没有答案