【问题标题】:Communicating between sibling scopes in Angular在 Angular 中的兄弟作用域之间进行通信
【发布时间】:2014-12-30 17:23:26
【问题描述】:

这是如何在同为作用域的两个组件之间正确通信吗?

  1. Ctrl1 将事件发送到 Ctrl1 和 Ctrl2 的父范围。
  2. 父作用域监听 Ctrl1 发出的事件,然后向下广播另一个事件到 Ctrl2。
  3. Ctrl2 监听来自父作用域的广播事件。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    是的,这就是我在 Angular 中的兄弟作用域之间进行通信的方式。通常,我认为 Ctrl1 向其所有后代作用域发出“向上”信号,并在监听事件的父作用域上“发射”,父作用域向所有子作用域广播“向下”。在这种情况下,Ctrl2 应该在“on”上设置一些东西,以便在听到事件后执行某些操作。

    作为旁注,我做了类似的事情,我使用 rootScope 作为集中式事件总线,它监听不同的子范围的事件,然后执行一些任务或再次向下广播。然后子作用域将负责简单地发射到根作用域。

    【讨论】:

      【解决方案2】:

      嗯 - 在与父控制器通信up 时,从技术上讲,您不需要$emit,孩子可以访问。但是在与子作用域进行通信时,您确实需要$broadcast

      app.controller("parentCtrl", function($scope) {
          $scope.testMe = function() {
              $scope.$broadcast("done"); //transmit to ctrl2
          }
      });
      
      app.controller("childCtrl1", function($scope) {
          $scope.testMe(); //call parent
      });
      
      app.controller("childCtrl2", function($scope) {
          $scope.$on("done", function() {
              alert("Caught parent event");
          });
      });
      

      【讨论】:

      • 如果childCtrl1 中的范围真的是指令的隔离范围怎么办?
      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2017-07-18
      • 2016-07-08
      • 2017-05-04
      相关资源
      最近更新 更多