angularjs ui路由器状态参数在页面刷新时丢失

angularjs ui路由器状态参数在页面刷新时丢失,angularjs,angular-ui-router,angular-routing,Angularjs,Angular Ui Router,Angular Routing,我正在做一个角度项目,在那里我设置了我的状态,如下所示 $stateProvider.state('UserPanel', { url: '/user', params: { userId: null }, views: { 'content@': { templateUrl: '/AngViews/UserPanel/UserPanel.UserDetails.html' } } }); 当我导航到视图时

我正在做一个角度项目,在那里我设置了我的状态,如下所示

$stateProvider.state('UserPanel', {
    url: '/user',
    params: { userId: null },
    views: {
        'content@': {
            templateUrl: '/AngViews/UserPanel/UserPanel.UserDetails.html'
        }
    }
});
当我导航到视图时,它会带上参数,所以这部分工作正常

但是当我更新页面时,它会丢失参数。 我知道,如果我在变量中定义了参数,它将起作用。但我想让它隐形

我找到了类似的东西,但不知道它是否能解决我的问题。如果它能工作,它就不能工作。谁能解释一下这是怎么做到的


感谢您抽出时间

我遇到了同样的问题,并用这段代码解决了它

angular.module('app').run(function($rootScope, $state, localStorageService) {

  $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
   var prefix = "stateParams.";
   var fromStateName = prefix + fromState.name;
   var toStateName = prefix + toState.name;
   var f = true;
   for (var k in toState.params) {
     f = f && (JSON.stringify(toParams[k]) == JSON.stringify(toState.params[k]));
   }
   if (f && localStorageService.get(toStateName) != null) {
     event.preventDefault();
     var savedToParams = localStorageService.get(toStateName); //retrieving toParams from local storage
     localStorageService.remove(toStateName);
     for (var k in toState.params) {
       toParams[k] = savedToParams[k]; //update only the params {} not url params
     }
     $state.transitionTo(toState,toParams);
   } else {
     var toSave = {};
     for (var k in toState.params) {
       toSave[k] = toParams[k]; //save only the params {} not url params
     }
     localStorageService.set(toStateName,toSave);
   }
  });

});

我尝试使用
localStorageService
在状态转换之间“缓存”参数

当从状态A转到状态B时,我删除了先前为A存储的参数

然后,我检查发送给B的参数是否与B的状态定义中的参数匹配,如果匹配,我将从localStorage加载参数,因为这意味着用户已点击刷新,参数已重置


我在几个案例中测试了这段代码,但仍然没有完全测试。

当你刷新应用程序时,整个应用程序将重新启动。因此,应用程序中不会存储以前的数据。唯一不会刷新的部分是url。因此,如果您将stateparam放在url中,它将起作用,否则您需要使用localstorage或类似的东西来存储数据。但是否可以将其保存到本地存储或缓存一页,然后在状态发生变化时将其删除?是的,这是可能的。每个路由都有一个特定的解析函数。因此,在特定路径中,您可以在本地存储中设置数据,在其他解决方案中,您需要清除localstorage.com。您可以展示一下这个示例吗?@shankarGuru userid在本例中是一个字符串。我不知道是否可以将对象传递给json字符串并将其用作参数。或者您可以手动将对象转换为参数。该死,localStorage是唯一的可能吗?URL中的那个或传递参数?还有其他方法吗?据我所知,当用户点击“刷新”时,你的应用程序会完全重新启动,因此,你会丢失范围和工厂/服务数据,我知道保存这些数据的唯一方法是在本地存储中。本文讨论了在刷新时使用$cookieStore作为状态。解决方案很好,但问题不大。它永远被相同的状态参数卡住。为了防止这种使用:$state.transitiono(toState,u.extend(toParams,{stateChangeStart\u reenter:true}));并且在重新输入时不要保存。@alehro您能用您提到的代码发布一个答案吗