在Angular中的兄弟范围之间进行通信

时间:2014-12-30 17:23:26

标签: javascript angularjs

这是如何在作为范围兄弟的两个组件之间正确通信的吗?

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

2 个答案:

答案 0 :(得分:7)

是的,这是我在Angular中兄弟范围之间进行通信的方式。通常我认为Ctrl1向其所有后代范围发出'up',并且'on'在监听事件的父范围内,父范围向所有子范围广播'down'。在这种情况下,一旦听到事件,Ctrl2应该在'on'上设置一些东西。

作为旁注,我已经做了类似的事情,我将rootScope用作集中式事件总线,在那里它监听不同的子范围事件,然后再执行一些任务或广播。然后,子范围将负责简单地发出rootScope。

答案 1 :(得分:5)

嗯 - 在将 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");
    });
});