刷新页面删除非URL $stateParam (ui-router)

Refreshing page removes non-URL $stateParam (ui-router)

我在我的应用程序中使用 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 参数?

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

如果您真的很想打破常规并执行此操作,则需要做一些事情来将数据保存在 window.name 中并在重新加载时检索它。这绝对是一种反模式,任何人都可以访问该数据,但正如我所说,这是可能的。

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

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