$rootScope:infdig достигнуто 10 итераций $digest(). Прерывание

Я использую UI-Router и проверяю существующий токен для каждого состояния, которое начинает меняться. Эта ошибка возникает только при первой загрузке страницы. Если я обновлю страницу, его уже нет.

Вот мой rootscope, который я считаю ошибкой:

 .run(['$rootScope', '$location', '$state', '$http', '$window', 'APIROOT', function ($rootScope, $location, $state, $http, $window, APIROOT) {
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
        var isLogin = toState.name === "login";
        if (isLogin) {
            return;
        }
        var userInfo = $window.sessionStorage.token;
        if (!userInfo) {
            event.preventDefault();
            $state.go('login');
        } else {
            $http.get(APIROOT + 'check_token').then(function(resp){
                return true;
            }).then(function(err){

            })
        }
    });
}]);

Мой контроллер:

angular.module('app')
.controller('AppCtrl', ['$http', '$scope', '$window', 'APIROOT', AppCtrl]);

function AppCtrl($http, $scope, $window, APIROOT) {
    var date = new Date();
    var year = date.getFullYear();

    $scope.main = {
       name: $window.sessionStorage.getItem('name'),
       brand: 'Brand',
       year: year
    };
}

Первое решение, которое я нашел, - это изменить «$ stateChangeStart» на «$ stateChangeSuccess», но я хочу, чтобы оно проверялось, прежде чем оно будет успешно изменено.

Что я должен исправить?


person ssuhat    schedule 17.11.2015    source источник
comment
я думаю, что это не проблема, обновите код вашего контроллера   -  person ngLover    schedule 17.11.2015
comment
Спасибо, вы заставили меня осознать, что мой сеанс вызова appctrl не определен.   -  person ssuhat    schedule 17.11.2015


Ответы (1)


Я понимаю, что мой вызов AppCtrl $window.sessionStorage.getItem('name') не определен.

Итак, я изменяю его:

angular.module('app')
.controller('AppCtrl', ['$http', '$scope', '$window', 'APIROOT', AppCtrl]);

function AppCtrl($http, $scope, $window, APIROOT) {
    var date = new Date();
    var year = date.getFullYear();
    if ($window.sessionStorage.getItem('name')) {
    var name = $window.sessionStorage.getItem('name');
     } else {
        var name = "";
     }
    $scope.main = {
       name: name
       brand: 'Brand',
       year: year
    };
}
person ssuhat    schedule 17.11.2015