![](/img/trans.png)
[英]Having Issues trying to re-direct user based on state , using React-Router
[英]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进入禁止视图。
问题是您正在尝试更改状态,而先前的状态更改仍在进行中。 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.