10 угловых итераций, достигнутых в angularjs при использовании $ state.go

0

Я использую угловой с ионным.

Я не хочу, чтобы пользователь снова заходил в систему, если он уже вошел в систему и не вышел из системы в последний раз, когда использовал приложение. По этой причине я использую локальное хранилище, чтобы проверить, вошел ли пользователь в систему. Я попытался поместить этот код в блок запуска.

$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
    if($localStorage.userInfo){
        $state.go('Deployment');   //This is line 270 of app.js
         event.preventDefault();
                return;

        }
      })

но он дает ошибку, которая гласит:

RangeError: Maximum call stack size exceeded
    at Scope.$broadcast (ionic.bundle.js:23414)
    at Object.transitionTo (ionic.bundle.js:40804)
    at Object.go (ionic.bundle.js:40671)
    at app.js:270
    at Scope.$broadcast (ionic.bundle.js:23412)
    at Object.transitionTo (ionic.bundle.js:40804)
    at Object.go (ionic.bundle.js:40671)
    at app.js:270
    at Scope.$broadcast (ionic.bundle.js:23412)
    at Object.transitionTo (ionic.bundle.js:40804)

Также,

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.13/$rootScope/infdig?p0=10&p1=%5B%5D
    at ionic.bundle.js:8755
    at Scope.$digest (ionic.bundle.js:22973)
    at Scope.$apply (ionic.bundle.js:23198)
    at done (ionic.bundle.js:18351)
    at completeRequest (ionic.bundle.js:18541)
    at XMLHttpRequest.requestLoaded (ionic.bundle.js:18482)

Как исправить эти ошибки?

config в моем приложении выглядит так:

.config(function($stateProvider,$urlRouterProvider){
  $stateProvider
  .state('Login',{
    url:'/login',
    templateUrl:'templates/login.html',
    controller:'LoginCtrl'
  })

  .state('Deployment',{
    url:'/deployment',
    templateUrl:'templates/deployment.html'
  })
  .state('Bill',{
    url:'/bills',
    templateUrl:'templates/bills.html'
  })
$urlRouterProvider.otherwise('/login');
})

Редактировать 1: После прочтения этой ссылки github

Я изменил условие if

 if($localStorage.userInfo != null && toState.name != 'Deployment'){
            $state.go('Deployment');
             event.preventDefault();
                    return;

            }

и Maximum call stack size exceeded went away.

Но я до сих пор остался с 10 digest iterations reached.

Edit: 2

Я изменился

'$urlRouterProvider.otherwise('/login');' in app.js

в

$urlRouterProvider.otherwise(function ($injector) {
           var $state = $injector.get('$state');
            $state.go('Login');
        }); 

после чего я уверен, что я пропустил какое-то условие в if-выражении, т.е.

   if($localStorage.userInfo != null && toState.name != 'Deployment')

Могу ли я, пожалуйста, получить помощь от того, что я мог пропустить, что привело к бесконечному циклу?

Теги:
angular-ui-router

1 ответ

0

Посмотрите на документацию по ui-router http://angular-ui.github.io/ui-router/site/#/api/ui.router.state. $stateChangeStart событие $stateChangeStart можно отменить с помощью event.preventDefault() однако вы инициируете переход до того, как вы отмените старый.

Следовательно, поскольку toState.name не является документированным свойством, кажется, что это снова и снова будет терпеть неудачу при условии и не будет генерировать новые изменения состояния.

Пытаться:

if($localStorage.userInfo != null && toState.$current.name != 'Deployment'){
    event.preventDefault();
    $state.go('Deployment');
    return;
}
  • 0
    Там написано не может прочитать имя свойства undefined.
  • 0
    Пожалуйста, проверьте обновление
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню