Angularjs 使用ui路由器刷新页面时,StateParams为空

Angularjs 使用ui路由器刷新页面时,StateParams为空,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我在一个项目中使用angular的ui路由器和嵌套路由,当我使用链接(ui sref)以用户ID作为url的一部分导航到用户的详细信息页面时,我面临着一个问题,即所有内容都像一个符咒一样工作。刷新页面时,状态参数丢失 所以我看了angular演示:无法重现这种行为,但是与我的应用程序相比,嵌套状态不是演示的一部分 $stateProvider .state('base', { abstract: true }) .state('home', { p

我在一个项目中使用angular的ui路由器和嵌套路由,当我使用链接(ui sref)以用户ID作为url的一部分导航到用户的详细信息页面时,我面临着一个问题,即所有内容都像一个符咒一样工作。刷新页面时,状态参数丢失

所以我看了angular演示:无法重现这种行为,但是与我的应用程序相比,嵌套状态不是演示的一部分

$stateProvider
    .state('base', {
      abstract: true
    })
    .state('home', {
      parent: 'base',
      url: '/',
      views: {
        'content@': {
          templateUrl: 'app/index/index.view.html',
          controller: 'IndexController',
          controllerAs: 'home'
        }
      }
    })
    .state('users', {
      url: '/users',
      parent: 'base',
      abstract: true
    })
    .state('users.list', {
      url: '/list',
      views: {
        'content@': {
          templateUrl: 'app/users/users.list.html',
          controller: 'UsersController',
          controllerAs: 'users'
        }
      },
      permissions: {
        authorizedRoles: UserRoles.ALL_ROLES
      }
    })
    .state('users.details', {
      url: '/:userId/details',
      views: {
        'content@': {
          templateUrl: 'app/users/user.details.html',
          controller: 'UserDetailsController',
          controllerAs: 'userDetails'
        }
      },
      resolve: {
        logSomeParams: ['$stateParams', '$state', function ($stateParams, $state) {
          console.log($stateParams);
          console.log(this);
          console.log($state);
        }]
      }
    })
刷新页面时,url立即更改为,控制台输出(解析函数)显示缺少参数

HTML5模式(LocationProvider)未启用。我已经找到了“解决方案”,比如如果页面刷新时用户ID丢失,就重定向回列表,但我真不敢相信没有更好的方法来解决这个问题

这是我在概述中链接详细信息页面的方式(它正在工作):


正如所料,我的问题与
用户界面路由器无关。即使您刷新页面,
URLMatcher
也能按预期工作(其他一切都会让您大失所望)

但是,我有一个
$stateChangeStart
侦听器,它检查
SAML
身份验证会话(cookie)是否仍然有效,并等待结果

function(event, toState, toParams, fromState, fromParams){
    if(!authenticationService.isInitialized()) {
      event.preventDefault();
      authenticationService.getDeferred().then(() => {
        $state.go(toState);
      });
    } else {
      //check authorization
      if ( authenticationService.protectedState(toState) && !authenticationService.isAuthorized(toState.permissions.authorizedRoles)) {
        authenticationService.denyAccess();
        event.preventDefault();
      }
    }
}
不知道这是怎么发生的,但我忘记了将参数传递给
stateProvider
go
方法。所以我要做的就是添加参数:

$state.go(toState, toParams);
$state.go(toState, toParams);