我有一个$rootScope.$on(“$stateChangeStart”)事件,它改变了标题和描述.
在我的事件中,我必须使用在$http请求之后创建的$rootScope对象.问题是当$stateChangeStart事件运行时,我的对象是未定义的.
我试图在我的ui-router状态下使用resolve.但它只适用于控制器,而不适用于事件.
你可以帮我提出一个解决方案,它将在路由开始之前运行我的服务(使用$http请求)(并运行$stateChangeStart事件),并且在状态更改后它不会再次运行此服务.
最佳答案 我决定尝试用一个承诺解决这个问题:
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams){
if ($rootScope.myObj) { // if my "object" was already created
eventLogic();
} else {
getMyObj.init().then(function(res){ //call service that retuns a promise
eventLogic();
});
}
function eventLogic() {
...
}
}
这个解决方案完全解决了我的问题.它等待创建$rootScope.myObj,它只运行一次此服务.