【问题标题】:UI Router $stateParams are only readableUI 路由器 $stateParams 仅可读
【发布时间】:2017-05-16 20:27:14
【问题描述】:

我目前正在使用 $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);
}

在我的本地机器上这工作。但是在我的开发服务器上,我收到了这个错误:

Cannot assign to read only property 'id' of object '#<Object>'.

有没有办法让 $stateParams 可写?

希望这是有道理的,在此先感谢。

【问题讨论】:

  • 你能创建一个plnkr.cojsfiddle.net 吗?
  • 有一些技巧可以做到这一点,但在大多数情况下,这种方法表明某种糟糕的设计决策。您通常会在重新加载 URL 后将所需的状态保留为路由参数,然后使用 state.go() 设置 stateParams

标签: javascript angularjs angular-ui-router


【解决方案1】:

这对我有用

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

【讨论】:

    【解决方案2】:

    由于我找不到实际写入 $stateParams 的解决方案,因此我只是针对这种情况创建了一个新对象。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      相关资源
      最近更新 更多