AngularJS在run函数中访问$ statparams

AngularJS accessing $stateParams in run function

本文关键字:访问 statparams 函数 run AngularJS      更新时间:2023-09-26

我希望能够访问我的run函数中的url参数,并根据这些参数进行操作。然而,看到这个ui时我还是很惊讶。路由器的$stateParams对象在我的运行函数中是空的。

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'

        });
}]);

是否可以在run函数中访问从$stateParams访问的参数?或者它们只在config函数中可用?为什么它们不能在run函数中访问?

Plnkr: http://plnkr.co/edit/1YXKRmR48LyxbGXWq66Y?p=preview

谢谢你的帮助。

看起来你正在使用StateChangeStart事件,你可以在这个事件中访问参数:

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

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