所以我有一个
angularjs应用程序,每个局部视图有几个局部视图和一个控制器.我还有一个服务,它将从$rootScope广播事件:
$rootScope.$broadcast('MyEvent','message');
目前只有一个控制器监听事件,我注意到如果我不在与该控制器关联的视图上(通过路由),那么该控制器中永远不会收到该事件,因此从不加载与之关联的视图.无论哪个视图处于活动状态,如何确保控制器接收事件广播?我尝试在我的控制器中使用$scope.$on(‘MyEvent’)…和$rootScope.$on(‘MyEvent’)…似乎都不起作用.
这是预期的行为.如果您的部分视图具有与之关联的各个控制器,则仅在呈现视图时控制器才在范围内.只有在部分视图中解析ng-controller指令时,控制器才会进入范围.因此,只有在加载与其关联的视图后,才能使控制器在范围内.
在你使用$rootScope广播事件myEvent的情况下.$broadcast(‘MyEvent’,’message’);您想要接收此事件的控制器不在范围内.
看到这个清楚地在你的广播步骤上放置一个断点并暂停执行以检查控制台中的angular.element(‘[ng-controller = urControllerName]’).scope()的值,你可以看到它将是未定义的含义控制器尚未在范围内.