首先,父子范围关系确实很重要。你有两种可能性发出某些事件:
$broadcast
-将事件向下分发到所有子范围,$emit
-通过范围层次结构向上调度事件。
我对你的控制器(作用域)关系一无所知,但是有几种选择:
如果scope of
firstCtrl是作用域的父级,则
secondCtrl你的代码应通过替换
$emit为
$broadcastin来工作
firstCtrl:
function firstCtrl($scope){ $scope.$broadcast('someEvent', [1,2,3]);}function secondCtrl($scope){ $scope.$on('someEvent', function(event, mass) { console.log(mass); });}如果你的范围之间没有父子关系,则可以注入
$rootScope控制器并将事件广播到所有子范围(即
secondCtrl)。
function firstCtrl($rootScope){ $rootScope.$broadcast('someEvent', [1,2,3]);}- 最后,当你需要将事件从子控制器分派到向上作用域时,可以使用
$scope.$emit
。如果的范围firstCtrl
是范围的父级secondCtrl
:
function firstCtrl($scope){ $scope.$on('someEvent', function(event, data) { console.log(data); });}function secondCtrl($scope){ $scope.$emit('someEvent', [1,2,3]);}


