angularjs中,我的路由大概如下
$stateProvider
//index
.state(
"index",{
url:"",
abstract:true,
templateUrl:"pages/menu.html",
controller:"menuCtrl"
})
.state(
"index.jianzhi",
{
url:"/jianzhi",
views:{
"jianzhi":{
templateUrl:"pages/jianzhi.html",
controller:"jianzhiCtrl"
}
}
})
.state(
"index.jiajiao",
{
url:"/jiajiao",
views:{
"jiajiao":{
templateUrl:"pages/jiajiao.html",
controller:"MyCtrl"
}
}
})
//login
.state(
"login",{
url:"/login",
templateUrl:"pages/login.html",
controller:"LoginCtrl"
})
在LoginCtrl里,我调用service进行广播
.service('EventService', ['$rootScope', function($rootScope){
var Messenger = {
broadcast:function(EventName){
setTimeout(function(){
$rootScope.$broadcast(EventName);
},100)
}
};
return Messenger;
}])
在menuCtrl里,我来接受消息
$scope.$on("update",function(){
console.log('update');
getUserName();
});
按理说这时on事件应该接受到消息了,但是实际情况却没有,把scope换成rootscope正常接收到消息
请问这是为什么
谢谢
$rootScope是所有scope的父级
它的广播($broadcast)和监听($on) 可以在无交集的controller间使用
$scope 的 $broadcast 和 $on 是用于作用域有交集(父子关系)controller间事件传递 有别于$rootScope
https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/