2017-07-14 72 views
0

我在控制器userAccess标志,如果返回false我想隐藏用户的所有应用程序,并与一些访问所需的形式将用户重定向到access.html因此,与下面的代码,它抛出错误transition superseded,不知道如何实现与angularjs ui.router这项任务?如何使用AngularJs重新指向基于标志的状态?

mainCtrl.js

$scope.cookie = $cookies.get(jklHr'); 
var parts = $scope.cookie.split("|"); 
var uidParts = parts[7].split(","); 
$scope.newUser._id = uidParts[0]; 
var userAccess = AuthService.getCurrentUser($scope.newUser._id); 

    if(!userAccess) { 
     console.log("Access Deinied"); 
     $state.go('app.access'); 
    } 

app.js

angular.module('App', [ 
    'ui.router', 
    'ui.bootstrap', 
    'ui.bootstrap.pagination', 
    'ngSanitize', 
    'timer', 
    'toastr', 
    'ngCookies', 
]).config(function($stateProvider, $httpProvider, $urlRouterProvider) { 
    'use strict' 

    $urlRouterProvider.otherwise(function($injector) { 
     var $state = $injector.get('$state'); 
     $state.go('app.home'); 
    }); 

    $stateProvider 
     .state('app', { 
      abstract: true, 
      url: '', 
      templateUrl: 'web/global/main.html', 
      controller: 'MainCtrl' 
     }) 
     .state('app.home', { 
      url: '/', 
      templateUrl: 'view/home.html', 
      controller: 'MainCtrl' 
     }) 
     .state('app.dit', { 
      url: '/dit', 
      templateUrl: 'view/partials/logs.html', 
      controller: 'LogsCtrl', 
      resolve: { 
       changeStateData: function(LogsFactory) { 
        var env = 'dit'; 
        return LogsFactory.resolveData(env) 
         .then(function(response) { 
          return response.data 
         }); 
       } 
      } 
     }) 
     .state('app.access', { 
      url: '/access', 
      templateUrl: 'view/partials/access.html', 
      controller: 'AccessCtrl' 
     }); 
}); 

回答

0

的问题是,你正在试图改变状态,而以前的状态的变化仍然在课程。 ui路由器具有状态更改开始和结束时的事件。

$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) { 

}); 

所以你的重定向应该在那里。无论如何,我建议您将该用户检查移至应用程序的更高级别,例如.run(),但登录状态有一些例外情况。这样你就不必单独检查每个控制器。

0

请确保您已获得angularjs & angular-ui的最新版本。如果您使用的是旧版本,请检查angular-ui版本与您的角度版本的兼容性。 https://github.com/angular-ui/ui-router/issues/3246 如果不工作,添加以下行内的app.config

$qProvider.errorOnUnhandledRejections(false) 

不要忘了加在config功能的依赖性$qProvider