加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何在浏览器刷新时保留ui-router参数

发布时间:2020-12-17 18:08:51 所属栏目:安全 来源:网络整理
导读:我使用角度ui-router来管理我的SPA的状态. 我有这条路线: .state('index.administration.security.roleEdit',{ url: '/roleEdit',templateUrl: 'app/administration/security/role/roleEdit.html',controller: 'roleEditCtrl',controllerAs: 'roleEditCtrl'
我使用角度ui-router来管理我的SPA的状态.
我有这条路线:

.state('index.administration.security.roleEdit',{
                url: '/roleEdit',templateUrl: 'app/administration/security/role/roleEdit.html',controller: 'roleEditCtrl',controllerAs: 'roleEditCtrl',params: { data: null },resolve: {
                    role: function ($stateParams) {
                        return angular.fromJson($stateParams.data);
                    },modules: function (securityService) {
                        return securityService.getAllModules();
                    }                       
                }
            })

另外,我将’data’参数作为json对象传递给状态.
现在当我第一次加载这个状态时,一切都很好.
但是当我执行浏览器刷新(F5键)时,$stateParams.data在状态的resolve函数中为null.

我怎么解决这个问题?
我看到这些可能的解决方案
1.坚持某种参数
2.覆盖浏览器刷新(不知道如何)停止浏览器刷新应用程序.
3.刷新goto其他兄弟状态.

请帮忙

UPDATE
好的,我设置这样的数据:

vm.editRole = function(roleId){
     var role = dataService.getRoleById(roleId).then(function(result){
           $state.go('roleEdit',{data:angular.toJson(result)});
           });
}

更新2
roleEdit控制器如下所示:

(function(){
    angular.module('app.administration').controller('roleEdit',['role','modules','$scope','securityService','$state',roleEditCtrl]);

    function roleEditCtrl('role',$scope,securityService,$state){
        var vm = this;
        vm.roles = roles;
        vm.originalRole = angular.copy(role);
        vm.modules=modules;
        vm.saveChanges = _saveChanges;
        vm.cancel = _cancel;

        return vm;

        function _saveChanges(){
            securityService.UpdateRole(vm.role).then(function(result){
                $staste.go('^.roles');
            }
        }

        function _cancel(){
            vm.role = angular.copy(vm.originalRole);
            $sscope.roleEditForm.$setPristine();            
        }
    }
})();

解决方法

有同样的问题,留下这个以防其他人需要它.通过使用localStorage解决了它.

我把它设置为app的run方法的一部分

$rootScope.$on('$stateChangeSuccess',function (event,toState) {
    localStorage.setItem('__stateName',toState.name);
});

现在,根据您的应用程序结构,您可能需要考虑将其放在其他位置,但在我的情况下,我有一个围绕所有子控制器的父AppController,所以这部分代码就在那里.

var previousState = localStorage.getItem('__stateName');
previousState && $state.go(previousState) || $state.go(<SOME_OTHER_ROUTE>);

基本上,当用户点击浏览器刷新时,AppController从开始(在子控制器之前)初始化,如果有的话,立即触发状态转换.否则,你会去其他一些州.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读