angularjs - 如何拦截 angular.js 中的所有 $rootScope.$broadcast 事件

标签 angularjs events

我可能有多个 $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/

[2] https://docs.angularjs.org/api/auto/service/ $提供

关于angularjs - 如何拦截 angular.js 中的所有 $rootScope.$broadcast 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399551/

相关文章:

javascript - angular-translate:如何加载静态 json 文件?

javascript - 在 AngularJS 组件中从父级到子级的事件通信

angularjs - Angular.Service 与 Angular.Factory

javascript - 窗口加载后的 element.onclick 事件在 javascript 中不起作用

javascript - 动态创建的元素上的事件绑定(bind)?

C#订阅事件时为什么要使用 "new"关键字?

AngularJS - 使用过滤器的条件格式

php - AngularJS PHP MYSQL 用户登录

java - 如何检测 NativeEvent 中的数字键?

javascript - 动态创建的元素上的事件绑定(bind)?