Javascript 角度域中同级作用域之间的通信

Javascript 角度域中同级作用域之间的通信,javascript,angularjs,Javascript,Angularjs,这是如何在范围同级的两个组件之间正确通信的吗 Ctrl1向Ctrl1和Ctrl2的父范围发出事件 父作用域侦听从Ctrl1发出的事件,然后将另一个事件向下广播到Ctrl2 Ctrl2从父作用域侦听广播的事件 是的,这就是我如何在同级作用域之间进行角度通信。通常,我认为Ctrl1向其所有子作用域发出“up”,并在侦听事件的父作用域上发出“on”,父作用域向所有子作用域广播“down”。在这种情况下,Ctrl2应该在“开”上设置一些内容,以便在听到事件后执行某些操作 作为旁注,我做了一些类似的事情,

这是如何在范围同级的两个组件之间正确通信的吗

  • Ctrl1向Ctrl1和Ctrl2的父范围发出事件
  • 父作用域侦听从Ctrl1发出的事件,然后将另一个事件向下广播到Ctrl2
  • Ctrl2从父作用域侦听广播的事件

  • 是的,这就是我如何在同级作用域之间进行角度通信。通常,我认为Ctrl1向其所有子作用域发出“up”,并在侦听事件的父作用域上发出“on”,父作用域向所有子作用域广播“down”。在这种情况下,Ctrl2应该在“开”上设置一些内容,以便在听到事件后执行某些操作


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

    好吧-从技术上讲,在向上与父控制器通信时,您不需要使用
    $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
    中的范围实际上是指令的隔离范围,该怎么办?