繁体   English   中英

有条件地使用角度ui-router导航到状态

[英]Conditionally navigate to state with angular ui-router

目前,我们有一个测试版的“投资组合”工具。 一旦用户登录到主应用程序,如果他们已获得访问测试版的权限,他们可以直接导航到Portfolio工具,无需任何其他登录。 如果没有,他们应该被重定向到一个投资组合登录页面(状态称为portfolio.login),他们可以在那里登录或联系支持/销售等。现在我在解决方案块中检查,但$ state.go('投资组合.login')似乎获取正确的部分,但不会在屏幕上呈现它们或导航到适当的URL。

码:

angular.module('portfolio.manager').config(function ($logProvider, $stateProvider) {
'use strict';

    $stateProvider
    .state('portfolio.manager', {
        url: '/manager',
        resolve: {
            CheckLoggedIn: function ($state, loggedIn) {
                var _loggedIn = loggedIn.checkUser();
                if (!_loggedIn) {
                    $state.go('portfolio.login');
                    console.log('not authorized');
                }
            },
            portfolioAuthService: 'portfolioAuthService',

            User: function(portfolioAuthService){
              return portfolioAuthService.getUser();

            },
            Portfolios: function (User, portfolioManagerService) {
                return portfolioManagerService.getPortfolios();
            }
        },
        views: {
            'main@': {
                templateUrl: 'app/portfolio/manager/portfolio-manager.html',
                controller: 'PortfolioManagerCtrl'
            },
            'no-portfolios@portfolio.manager': {
                templateUrl: 'app/portfolio/manager/partials/no-portfolios.html'
            },
            'create@portfolio.manager': {
                templateUrl: 'app/portfolio/manager/partials/create.html'
            }
        }
    })

几天前我遇到了同样的问题。 而不是使用resolve,我检查用户是否在状态更改时记录,定义run模块和监听$stateChangeStart事件,然后检查当前状态是否需要身份验证。 如果是,请检查用户是否已登录。

angular.module('portfolio.manager').config(function ($logProvider, $stateProvider) {
'use strict';

    $stateProvider
    .state('portfolio.manager', {
        url: '/manager',
        resolve: {
            portfolioAuthService: 'portfolioAuthService',

            User: function(portfolioAuthService){
              return portfolioAuthService.getUser();

            },
            Portfolios: function (User, portfolioManagerService) {
                return portfolioManagerService.getPortfolios();
            }
        },
        data: {
            requiredAuthentication: true
        },
        views: {
            'main@': {
                templateUrl: 'app/portfolio/manager/portfolio-manager.html',
                controller: 'PortfolioManagerCtrl'
            },
            'no-portfolios@portfolio.manager': {
                templateUrl: 'app/portfolio/manager/partials/no-portfolios.html'
            },
            'create@portfolio.manager': {
                templateUrl: 'app/portfolio/manager/partials/create.html'
            }
        }
    })

})
.run(run);

  run.$inject = ['$rootScope','$state','loggedIn'];

  function run($rootScope,$state,loggedIn){

    $rootScope.$on('$stateChangeStart',function(e,toState){

      if ( !(toState.data) ) return;
      if ( !(toState.data.requiredAuthentication) ) return;

      var _requiredAuthentication = toState.data.requiredAuthentication;


      if (_requiredAuthentication && !loggedIn.checkUser() ){

        e.preventDefault();
        $state.go('portfolio.login', { notify: false });
        console.log('not authorized');
      }
      return;


    });
  };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM