Javascript UI路由器$stateParams仅可读

Javascript UI路由器$stateParams仅可读,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我当前正在使用$stateParams将id传递到新状态。工作正常,但是如果用户重新加载页面怎么办?显然,$stateParams中不会有任何值。解决方法是在初始页面加载时将$stateParam id加载到localStorage中。重新加载时,如果$stateParams的id不存在,则手动分配它。例如: // Ensure params are set when page is reloaded if (!$stateParams.id) { $stateParams.id = loc

我当前正在使用$stateParams将id传递到新状态。工作正常,但是如果用户重新加载页面怎么办?显然,$stateParams中不会有任何值。解决方法是在初始页面加载时将$stateParam id加载到localStorage中。重新加载时,如果$stateParams的id不存在,则手动分配它。例如:

// Ensure params are set when page is reloaded
if (!$stateParams.id) {
  $stateParams.id = localStorageService.get('campaignId');
  $state.go($state.current, $stateParams);
}
在我本地的机器上,这是有效的。但是,在我的开发服务器上,出现以下错误:

无法分配给对象“#”的只读属性“id”

有没有办法使$stateParams可写


希望这是有意义的,提前谢谢。

因为我找不到实际写入$stateparms的解决方案,所以我刚刚为这种情况创建了一个新对象

var stateParamsClone = {};
// Ensure params are set when page is reloaded
if (!$stateParams.id) {
  stateParamsClone.id = localStorageService.get('campaignId');
  $state.go($state.current, stateParamsClone);
}
这对我有用


let$stateParams=Object.assign({},$transition$.params())

你能创建一个or吗?有一些黑客可以做到这一点,但在大多数情况下,这种方法是某种糟糕设计决策的标志。在URL中重新加载后,通常会将所需的状态保留为路由参数,然后使用state.go()设置stateparms