我正在使用一个 ui-sref
,它接受两个字符串和一个对象作为参数。在正常情况下一切正常,但是当我在导航到该对象的页面上刷新浏览器时,该对象变为空。
URL中的两个字符串刷新后没问题。有没有办法让对象在页面刷新后保留在 $stateparams
中。我已经尝试了几个选项,例如 $rootscope.$stateparams = $stateparams
,我也尝试过使用服务,但它会在刷新时被删除。使用本地存储不是一种选择。
.state('edit', {
url: '/editItem/:id?userId',
templateUrl: 'app/items/edit.html',
controller: 'editController',
controllerAs: 'vm',
params: {
id: "",
userId: "",
userObject: null,
}
})
我真的只需要对象在重新加载时保持不变。我正在使用 UI-router 1.0.0-beta.2
最佳答案
如果你想每次都在你的状态中使用你的 url 参数,你可以使用 resolve
函数:
.state('edit', {
url: '/editItem/:id/:userId',
templateUrl: 'app/items/edit.html',
controller: 'editController',
controllerAs: 'vm',
resolve: {
testObject: function($stateParams) {
return {
id: $stateParams.id,
userId: $stateParams.userId
}
}
}
})
现在,您可以将 testObject
作为您的 editController
的依赖项传递,每次解析此路由时,这些值将作为 testObject 在您的 Controller 中可用.id
和 testObject.userId
如果您想将对象从一个状态传递到下一个状态,请以编程方式使用 $state.go
:
$state.go('myState', {myParam: {some: 'thing'}})
$stateProvider.state('myState', {
url: '/myState',
params: {myParam: null}, ...
唯一的其他选择是通过本地存储或 cookie 进行缓存
关于javascript - 如何在浏览器刷新时保持 ui-router 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39456146/