Javascript AngularJS在运行函数中访问$stateParams

Javascript AngularJS在运行函数中访问$stateParams,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我希望能够访问我的run函数中的url参数,并根据这些参数执行操作。然而,我非常惊讶地看到ui.router的$stateParams对象在我的run函数中是空的 angular.module('app', ['ui.router']) .run(['$rootScope', '$state', '$stateParams', '$location', function($rootScope, $state, $stateParams, $location) { $rootScope.$

我希望能够访问我的
run
函数中的url参数,并根据这些参数执行操作。然而,我非常惊讶地看到ui.router的
$stateParams
对象在我的run函数中是空的

angular.module('app', ['ui.router'])
.run(['$rootScope', '$state', '$stateParams', '$location', function($rootScope, $state, $stateParams, $location) {
    $rootScope.$state = $state;
    $rootScope.location = $location;
    $rootScope.$stateParams = $stateParams;
    $rootScope.$on('$stateChangeStart', function(event, toState) {
      if (toState.name === 'main') {
      event.preventDefault();
      $state.go('main.child', {

        param: 1

      })
      }
    });
    console.log('$stateParams is empty!');
    console.log($stateParams);
    console.log($rootScope.$stateParams);
}])
.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) {

    $stateProvider
        .state('main', {

            url: '',
            template: '<div>hey</div><div ui-view></div>'

        })
        .state('main.child', {

            url: '/:param',
            template: 'child state template'


        });
}]);
angular.module('app',['ui.router']))
.run(['$rootScope','$state','$stateparms','$location',函数($rootScope,$state,$stateparms,$location){
$rootScope.$state=$state;
$rootScope.location=$location;
$rootScope.$stateParams=$stateParams;
$rootScope.$on(“$stateChangeStart”,函数(事件,toState){
如果(toState.name=='main'){
event.preventDefault();
$state.go('main.child'{
参数:1
})
}
});
log(“$stateParams为空!”);
console.log($stateparms);
log($rootScope.$stateParams);
}])
.config(['$stateProvider'、$urlRouterProvider'、$locationProvider',函数($stateProvider、$urlRouterProvider、$locationProvider){
$stateProvider
.州('main'{
url:“”,
模板:“嘿”
})
.state('main.child'{
url:“/:param”,
模板:“子状态模板”
});
}]);
是否可以在run函数中访问从
$stateParams
访问的参数?或者它们仅在
config
功能中可用?为什么在
run
功能中无法访问它们

Plnkr:


谢谢你的帮助

看起来您正在使用
StateChangeStart
事件,您可以在此事件中访问参数:

 $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
//you code goes here
console.log(toParams);
}

我用它来为参数添加一些自定义逻辑(身份验证重定向)

,这样就行了。谢谢知道为什么
stateParams
不可用会很有趣。这篇文章有助于我更好地理解“运行”:耶!非常有用。泰:-)