【问题标题】:Refreshing page removes non-URL $stateParam (ui-router)刷新页面删除非 URL $stateParam (ui-router)
【发布时间】:2018-05-08 15:19:14
【问题描述】:

我在我的应用程序中使用 UI-Router,并且我有一个状态参数,它作为 url 的一部分并没有真正意义。根据the documentation,我正在创建参数而不在状态url中指定它,例如:

.state('contact', {
        url: "/:contactId/contact",
        params: {
            otherParam: null
        },
        templateUrl: 'contacts.html'
    })

这按预期工作,但我注意到如果我手动刷新页面,参数会重置为默认 null。

例如,如果我重定向到这样的状态:

$state.go('contact', {contactId: 42, otherParam: 11});

一切正常($stateParams.contactId 是 42,$stateParams.otherParam 是 11) 但是,一旦我刷新页面,$stateParams.contactId 仍然是 42,但 $stateParams.otherParam 已设置回 null。是否可以在浏览器刷新期间保留此非 URL 参数?

【问题讨论】:

    标签: angularjs angular-ui-router


    【解决方案1】:

    SPA 中的 URL 用于管理 UI 状态,即:显示哪些组件以及使用哪些信息(例如带有 id 的详细信息组件)。路由器由此解析状态。一个很好的例子是将 url 视为通过电子邮件(或其他方式)发送给其他人的东西,并期望他们的路由器解析状态。所以,简单地说,我会拒绝你的问题。

    您的问题是您希望保留特定于浏览器会话的应用程序状态,对吗?浏览器为此配备了机制,我建议您查看 local storage or session storage 以解决您的问题并在状态声明中的 resolve 方法中检索您需要的信息。

    【讨论】:

      【解决方案2】:

      这是可能的,但你不应该这样做。如果它应该在刷新时持续存在,这意味着根据定义它应该在 URL 中,因为您希望它是资源的一个组件。

      如果你真的想打破惯例并这样做,你需要做一些事情来保存window.name中的数据并在重新加载时检索它。这绝对是一种反模式,任何人都可以访问该数据,但就像我说的那样,这是可能的。

      【讨论】:

      • 啊,这是一个好点,我可能应该把它作为 url 的一部分
      猜你喜欢
      • 2018-06-04
      • 1970-01-01
      • 2021-09-15
      • 2019-02-19
      • 1970-01-01
      • 2016-04-28
      • 2015-08-05
      • 2015-11-28
      相关资源
      最近更新 更多