控制器之间的通信-angularjs

控制器之间的通信-angularjs,angularjs,Angularjs,我有嵌套的控制器,需要在控制器之间建立一个BLISH通信。有两种方法可以实现这一点: 有一个中央“PubSub”服务,所有控制器都可以使用该服务进行通信。在我看来,这样做的缺点是,每个控制者都可以与任何其他控制者交谈,对继承人来说没有任何意义 另一种方法是,控制者只能与他的父亲和孩子交谈,如图所示: 因此,我需要一个单独的沟通渠道,为每个继承人级别。不知道如何实现这一点。我曾想过创建一个提供通信通道的服务,但如何将其注入相关控制器 哪种解决方案更好?如何实施第二种解决方案更好?或者可能还有其他解

我有嵌套的控制器,需要在控制器之间建立一个BLISH通信。有两种方法可以实现这一点:

  • 有一个中央“PubSub”服务,所有控制器都可以使用该服务进行通信。在我看来,这样做的缺点是,每个控制者都可以与任何其他控制者交谈,对继承人来说没有任何意义
  • 另一种方法是,控制者只能与他的父亲和孩子交谈,如图所示:
  • 因此,我需要一个单独的沟通渠道,为每个继承人级别。不知道如何实现这一点。我曾想过创建一个提供通信通道的服务,但如何将其注入相关控制器


    哪种解决方案更好?如何实施第二种解决方案更好?或者可能还有其他解决方案?

    在服务中创建一个映射如何,它将跟踪控制器之间可能的通信方式


    因此,如果您注册控制器1的示例作用域,您可以保存父作用域和子作用域的ID,并仅打开这些控制器的通信通道-您将发出具有特定com ID的事件。通道,它将只影响相关的控制器。

    对于方法2,一个选项是使用事件

    要将事件从父作用域向下发送到子/子作用域,可以使用
    $scope.$broadcast('myEvent',args)
    ,在子作用域中,使用
    $scope.on('myEvent',function(event,args){…})侦听事件

    尽管看起来所有通信都是向下的,但如果子作用域需要向上发送事件到父/祖先作用域,则可以使用
    $scope.$emit


    您可以检查以下问题:关于如何使用$emit(向上)和$on。它类似于$broadcast(向下)。

    是否尝试使用postaljs作为消息总线:

    您可以通过跨特定渠道发布邮件来使用postal,通过这种方式,您可以将邮件分离为root、root.leve1、root.level2等内容,并使用通配符主题订阅邮件。
    i、 e:root*,root.level1,…

    广播,发射等不要阻止儿童控制器与他的祖父控制器交谈…你是对的。顶部控制器可以向下广播给所有的孩子、孙子等。然而,孙辈们也可以选择不去听这件事。或者,如果孙辈选择收听该事件,请检查正在传递的参数,以决定他是应该处理还是忽略该事件。