2017-07-14 28 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