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

在angularjs中重定向状态

发布时间:2020-12-17 07:30:49 所属栏目:安全 来源:网络整理
导读:这是状态配置: angular .module('grabhutApp',[...]) .config(function ($stateProvider,$urlRouterProvider) { $stateProvider // ACCOUNT .state('account',{ abstract: true,url: '/account',templateUrl: 'index.html' }) .state('account.main',{ url:
这是状态配置:
angular
    .module('grabhutApp',[...])
    .config(function ($stateProvider,$urlRouterProvider) {

        $stateProvider
            // ACCOUNT
            .state('account',{
                abstract: true,url: '/account',templateUrl: 'index.html'
            })
            .state('account.main',{
                url: '',templateUrl: 'views/account/account.login.html',controller: 'AccountController'
            })
            .
            .
            .
            // NO VIEWS
            .state('nv',url: '/nv'
            })
            .state('nv.logout',{
                url: '/logout'
            })  
    });

nv及其子状态将没有物理视图或控制器.
我希望它们作为调用某些功能的链接.

调用注销方法的服务:

angular.module('grabhutApp')
    .factory('$grabhutAccountService',function ($state,$grabhutDataService) {

        var methods = {     
            .
            .
            logoutUser: function () {
                $grabhutDataService.user.removeSession();
                $state.go('account.main',{},{location: 'replace'});
            }
            .
            .
        };

        return methods;
    });

然后是一个用于注销的按钮/链接:

<a ui-sref="nv.logout" class="button icon icon ion-log-out button-large" menu-close></a>

我想要发生的是,当状态nv.logout被触发时
必须调用$grabhutAccountService.logoutUser()并且必须重定向到’account.main’

这是我到目前为止所做的:
我试着在nv.logout中使用resolve

.state('nv.logout',{
    url: '/logout',resolve: {
        logout: function ($grabhutAccountService) {
            $grabhutAccountService.logoutUser();
        }
    }
})

该服务被调用但状态没有重定向.所以我尝试了另一种方式.我添加了一个控制器:

.state('nv.logout',resolve: {
        logout: function ($grabhutAccountService) {
            $grabhutAccountService.logoutUser();
        }
    },controller: function ($scope,$state) {
        $scope.$on('$stateChangeSuccess',function () {
            $state.go('account.main');          
        });
    }   
})

但$stateChangeSuccess没有被解雇.
所以我尝试使用rootScope:

.run(function(....,$grabhutAccountService){

    .
    .
    .
    $rootScope.logout = function(){
        $grabhutAccountService.logoutUser();
    };
    .
    .
    .

})

并使用它像这样:

< a ng-click =“$root.logout()”class =“button icon icon ion-log-out button-large”menu-close>< / a>

这很好用.但我很担心,因为(AFAIK)rootScope会加载更多可能导致运行速度变慢的数据.
此外,每当我需要某种类似上面的功能时,我都必须再次在rootScope中附加功能.
而且我认为这不是一个好方法.顺便说一句,我在手机屏幕中构建这个,这就是内存使用如此重要的原因.

哦,你真是太近了.我重新安排了你的一些代码并得出了这个:
app.run(function($rootScope,$grabhutAccountService) {
   $rootScope.$on('$stateChangeSuccess',function (evt,toState) {
     if (toState.name === 'nv.logout') {
       $grabhutAccountService.logoutUser();
       $state.go('account.main');
     }  
   });
});

UI-Router的下一个主要版本将有很多改进的钩子来做这种事情.

(编辑:李大同)

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

    推荐文章
      热点阅读