在我的项目中,当用户来自任何URL时,首先我在控制器中检查用户的最新状态(如果他们进入无法访问的页面),然后将$ rootScope变量设置为用户的当前状态,并在应用程序的run方法中使用此变量,然后根据我在控制器中设置的$ rootScope中的当前状态将其发送到状态,但是我的问题是从nodejs的api获取当前状态的函数是在应用run方法检查之后调用,因此结果在run方法当前状态中显示为undefined,因为控制器函数正在运行run方法的代码之后。我不明白如何解决这个问题。拜托,请您帮我解决这个问题。
这是设置$ rootScope变量的控制器功能代码
$scope.getUserDetails = function () {
appService.getDetails('/user/getDetails').then(function (response) {
$scope.current_status = response.current_status;
$rootScope.current_status = $scope.current_status;
}
}
这是运行方法的代码
if (transition.to().name == "user.stateName"){
console.log($rootScope.current_status);
$state.go('store.' + $rootScope.current_status);
}
控制台中$ rootScope.current_status的输出为
undefined
答案 0 :(得分:0)
run
函数将在实例化控制器之前执行。因此,尝试在run
中获取变量会产生undefined
。
您可以改为使用状态配置中的redirectTo
根据某些逻辑重定向到特定状态。
.state('user.stateName', {
...
redirectTo: function(transition) {
var service = transition.injector().get('appService')
return service.getDetails('/user/getDetails')
.then(function(response) {
return response.current_status;
});
}
})
答案 1 :(得分:0)
经过大量搜索,终于解决了我的问题,当我注入appService并在run方法中调用appService方法时,我的问题就解决了。