这是如何在作为范围兄弟的两个组件之间正确通信的吗?
答案 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");
});
});