繁体   English   中英

如何使用AngularJs根据标志重定向到状态?

[英]How to re-direct to state based on flag using AngularJs?

我在控制器中有userAccess标志,如果它返回false我想从用户隐藏所有应用程序,并以某种需要访问的形式将用户重定向到access.html ,因此使用以下代码,它将引发错误transition superseded ,任何想法如何使用angularjs ui.router来实现此任务ui.router

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'
        });
});

创建一个拦截器,所有的http类都会抛出该拦截器。 一旦执行了“解决”部分并返回401,您就可以重定向到登录屏幕或403进入禁止视图。

https://docs.angularjs.org/api/ng/service/ $ http

问题是您正在尝试更改状态,而先前的状态更改仍在进行中。 ui路由器具有状态更改开始和结束的事件。

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

});

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

确保您拥有angularjs和angular-ui的最新版本。 如果您使用的是旧版本,请检查angular-ui版本与您的angular版本的兼容性。 https://github.com/angular-ui/ui-router/issues/3246如果这不起作用,请在app.config中添加以下行

$qProvider.errorOnUnhandledRejections(false)

不要忘记在配置函数中添加依赖项$qProvider

暂无
暂无

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

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