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

cor*_*ore 14 javascript angularjs

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

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

图

wmo*_*ock 7

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

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


tym*_*eJV 5

嗯 - $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");
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 如果`childCtrl1`中的范围真的是指令的隔离范围怎么办? (2认同)