Связь между областями между братьями и сестрами в Angular

Является ли это правильной связью между двумя компонентами, которые являются родными братьями?

  • Ctrl1 выдает событие до родительской области как Ctrl1, так и Ctrl2.
  • Родительская область прослушивает испускаемое событие из Ctrl1, затем транслирует другое событие до Ctrl2.
  • Ctrl2 прослушивает переданное событие из родительской области.

diagram

Ответ 1

Да, именно так я общаюсь между областями sibling в Angular. Как правило, я считаю, что Ctrl1 выбрал "вверх" для всех областей его потомков и 'on' родительскую область, которая прослушивает это событие, а родительская область - "вниз" для всех дочерних областей. В этом случае у Ctrl2 должно быть что-то настроенное на 'on', чтобы что-то сделать, когда оно услышит событие.

В качестве побочного примечания я сделал что-то подобное, когда я использовал rootScope как централизованную шину событий, где он прослушивает разные события в области детского пространства, а затем снова выполняет какую-то задачу или трансляции. Тогда дочерние области будут отвечать за простое испускание до rootScope.

Ответ 2

Ну, вам не нужно технически $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");
    });
});