如何在运行方法中访问控制器变量

时间:2019-01-03 07:00:01

标签: angularjs node.js angular-ui-router

在我的项目中,当用户来自任何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

2 个答案:

答案 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方法时,我的问题就解决了。