如何使用AngularJs基于flag重定向到状态?

时间:2017-07-14 17:58:39

标签: javascript angularjs angular-ui-router

如果控制器返回false,我在控制器中有userAccess标志我希望从用户隐藏所有应用程序并将用户重定向到access.html,并且需要一些访问权限形式所以使用下面的代码会抛出错误{{1}任何想法如何用angularjs transition superseded来实现这个任务?

mainCtrl.js

ui.router

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

问题是您正在尝试更改状态,而之前的状态更改仍在进行中。 ui-router具有状态更改开始和结束时的事件。

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

});

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

答案 2 :(得分:0)

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

中添加以下行
$qProvider.errorOnUnhandledRejections(false)

不要忘记在配置功能中添加依赖项$qProvider