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

时间:2018-05-08 15:19:14

标签: angularjs angular-ui-router

我在我的应用程序中使用了UI-Router,并且我有一个状态参数,它对于它成为url的一部分并不真正有意义。根据{{​​3}}我创建参数而不在状态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参数?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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