【发布时间】:2014-12-30 17:23:26
【问题描述】:
这是如何在同为作用域的两个组件之间正确通信吗?
- Ctrl1 将事件发送到 Ctrl1 和 Ctrl2 的父范围。
- 父作用域监听 Ctrl1 发出的事件,然后向下广播另一个事件到 Ctrl2。
- Ctrl2 监听来自父作用域的广播事件。
【问题讨论】:
标签: javascript angularjs
这是如何在同为作用域的两个组件之间正确通信吗?
【问题讨论】:
标签: javascript angularjs
是的,这就是我在 Angular 中的兄弟作用域之间进行通信的方式。通常,我认为 Ctrl1 向其所有后代作用域发出“向上”信号,并在监听事件的父作用域上“发射”,父作用域向所有子作用域广播“向下”。在这种情况下,Ctrl2 应该在“on”上设置一些东西,以便在听到事件后执行某些操作。
作为旁注,我做了类似的事情,我使用 rootScope 作为集中式事件总线,它监听不同的子范围的事件,然后执行一些任务或再次向下广播。然后子作用域将负责简单地发射到根作用域。
【讨论】:
嗯 - 在与父控制器通信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");
});
});
【讨论】:
childCtrl1 中的范围真的是指令的隔离范围怎么办?