刷新页面删除非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 方法的信息。
我在我的应用程序中使用 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 方法的信息。