控制器之间的通信 - angularjs

时间:2014-02-05 08:51:40

标签: angularjs

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

  1. 拥有一个中央“PubSub”服务,所有控制器都可以使用该服务进行通信。我的选择中的缺点是每个控制器都可以与任何其他控制器通信,并且对于层次结构没有任何意义。
  2. 另一种方法是控制器只能与他的父亲和这些孩子交谈,如图所示:enter image description here
  3. 因此,我需要为每个层次级别提供单独的通信通道。不知道如何实现这一目标。我想过提供一个提供通信通道的服务,但是如何将它注入相关的控制器?

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

3 个答案:

答案 0 :(得分:0)

如何在服务中创建地图,这将跟踪控制器之间可能的通信方式

因此,如果您注册Controller 1的示例范围,您可以保存父和子范围的ID并仅打开这些控制器的通信通道 - 您将发出特定ID为com的事件。通道,它只会影响那些涉及的控制器。

答案 1 :(得分:0)

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

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

虽然似乎所有通信都是向下的,但如果子范围需要向上发送事件到父/祖先范围,则可以使用$scope.$emit代替。

你可以查看这个问题:$scope.$emit and .$on angularJS关于如何使用$ emit(向上)和$ on。它类似于$ broadcast(向下)。

答案 2 :(得分:0)

您是否尝试将postaljs用作消息总线:http://jonathancreamer.com/an-angular-event-bus-with-postal-js/

您可以通过发布特定渠道的邮件来使用邮政,这样您就可以将邮件隔离到root,root.leve1,root.level2之类的东西,并使用通配符主题订阅它。 即:root *,root.level1,...