我可能有多个 $rootScope.$broadcast
事件影响一个 View 元素。我想要一个分层函数来决定哪个事件优先影响 View 。
我的问题是,如何监听 $rootScope
上的所有 $broadcast
事件?有某种事件拦截器吗?
最佳答案
我正在寻找同一问题的解决方案。在 https://github.com/angular/angular.js/issues/6043 遇到了 caitp 的解决方案我相信这也是您所寻找的。
这样做的优点是您可以将其保留在开发中,而无需将其包含在生产代码中,而无需更改应用程序中的任何逻辑。
我将从链接中复制代码以供后代使用,并进行一些细微的调整(以使用当前版本的 Angular):
app.config(function($provide) {
$provide.decorator("$rootScope", function($delegate) {
var Scope = $delegate.constructor;
var origBroadcast = Scope.prototype.$broadcast;
var origEmit = Scope.prototype.$emit;
Scope.prototype.$broadcast = function() {
console.log("$broadcast was called on $scope " + this.$id + " with arguments:",
arguments);
return origBroadcast.apply(this, arguments);
};
Scope.prototype.$emit = function() {
console.log("$emit was called on $scope " + this.$id + " with arguments:",
arguments);
return origEmit.apply(this, arguments);
};
return $delegate;
});
});
有关 $provide.decorate 的更多信息:
[1] http://blog.xebia.com/extending-angularjs-services-with-the-decorate-method/
关于angularjs - 如何拦截 angular.js 中的所有 $rootScope.$broadcast 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399551/