javascript - 如何在浏览器刷新时保持 ui-router 参数

标签 javascript angularjs angular-ui-router

我正在使用一个 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 中可用.idtestObject.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/

相关文章:

javascript - 成功构建后窗口无法打开

javascript - 更新模板并调用 $digest 不会触发具有正确参数的 $watch - 单元测试 angularjs

javascript - AngularJS 组件模式在 Promise 后不更新

javascript - 未捕获的类型错误 : Object [object Object] has no method "fancybox"

javascript - Bootstrap 模式无法在 jsfiddle 中打开

angularjs - Angular Bootstrap UI 轮播和 Angular 1.3.15

angularjs - 如何以 Angular 2显示嵌套对象和/或数组

javascript - ionic 框架 $state.go ('app.home' );在我想去的页面上添加后退按钮(如何删除它)?

angularjs - 将对象从 UI-Router 中的父状态传递给所有组件

HTML 文件中的 Javascript,每行单元格不断增加的表格