Связь между областями между братьями и сестрами в 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");
});
});