【问题标题】:Is there a good way to manage all events being fired on $rootScope so you don't end up with events with the same name?有没有一种很好的方法来管理在 $rootScope 上触发的所有事件,这样你就不会得到同名的事件?
【发布时间】:2014-10-13 19:57:24
【问题描述】:

我知道事件可能很快就很难看,但是有没有一种很好的方法来管理或控制事件的字符串名称,这样程序员在处理不同的组件时就不能给出相同的字符串名称事件?

【问题讨论】:

  • 我有一个wrapper created to manage the publish/subscribe in this answer of mine),而不必注入$rootScope(这让我很恼火,尤其是与出现在不同层次结构中的兄弟姐妹和组件进行通信)。可能您可以实现这种包装器并放置事件名称检查...
  • @PSL 谢谢你,我喜欢你的服务。我还可以在服务内使用 $scope 而不是 $rootScope 订阅事件吗?将范围作为参数传递?
  • 您的意思是在 pubsub 服务内部?将它放在 rootscope 中的目的是您可以在任何 $scopes 中使用该方法,但隔离范围除外,因为它们不是继承的。但是您应该能够注入服务并传入范围调用初始化

标签: angularjs angularjs-directive angularjs-scope


【解决方案1】:

做这些事情的最简单方法:只需编写你的包装器,它将注册事件

这只是一个想法的例子

angular.service("EventManager", function($rootScope){

  var events_names = {};

  return {
      on: function(name, cb){
        if(!events_names[name]){
            $rootScope.$on(name, cb);
        }
        else{
            console.error("This kind of event already defined!", name);
        }
      }
  }  
});

【讨论】:

    【解决方案2】:

    没有角度的方法可以做到这一点。但是您总是可以为 $broadcast/$emit 编写一个包装器,其中包含您的事件名称的注册表。

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 1970-01-01
      • 2011-08-31
      • 2014-07-22
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      相关资源
      最近更新 更多