javascript - 错误: Maximum call stack size exceeded on Angular Ui Router State Change

标签 javascript angularjs angular-ui-router

基本上我想做的是根据用户身份验证状态更改状态。

当我在没有 $rootScope 的情况下执行 $state.go(); 时,我可以重定向到页面而不会出现错误,但是当我使用

$rootScope.$on('$stateChangeStart', 函数 (事件) { $state.go(); event.preventDefault() })

下面是 Controller 代码:

DiaryDashboard.controller('AppController', 
  ['$scope', '$rootScope', '$localStorage', '$http', '$state'
  , function ($scope, $rootScope, $localStorage, $http, $state) {

  $rootScope.$on('$stateChangeStart', function (event, toState) {

    if ($localStorage.userdetails &&
        $localStorage.userdetails.isAuthenticated == true) {

        //Check for Authentication state
        //If not redirect to the state in the else clause
        //Populate the $rootScope with user details
        $rootScope.userdetails = $localStorage.userdetails;

        //Switch to the parent state
        $state.go();
        event.preventDefault();

    } else {

        //If User not authenticated
        //GO to the Authentication State
        $state.go('auth');
        event.preventDefault();

    }
  })

}]);

最佳答案

这里最重要的是理解这一点:

Do not redirect if not needed. Other words, if user is already redirected to intended state - we should leave... There is a working plunker with similar solution.

查看此问答:

Angularjs ui-router. How to redirect to login page

调整后的代码:

$rootScope.$on('$stateChangeStart', function (event, toState) {

    var isNavigatingToAuth = toState.name === "Auth";

    if(isNavigatingToAuth){

       return; // no need to redirect 
    }

    if ($localStorage.userdetails &&
        $localStorage.userdetails.isAuthenticated == true)
    ...

关于javascript - 错误: Maximum call stack size exceeded on Angular Ui Router State Change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002000/

相关文章:

javascript - iOS - 如何在默认浏览器(Safari 或 Chrome)而不是应用内浏览器中打开链接?

javascript - 如何在普通函数中使用 $location

javascript - 如何在 Angular 中正确添加额外验证指令?

javascript - $stateParams 未在 $scope.$on 方法中传递参数

javascript - 拒绝 promise Angular ui-router 后的 $state 转换

javascript - 什么是 ngModel.$validators 管道?

javascript - 如何禁用 div 中的 HTML 标签?

javascript - 如何下载执行了javascript的网页?

angularjs - Angular Dart 和表单验证

javascript - AngularJS ui-router,滚动到状态更改的下一步