Я использую угловой с ионным.
Я не хочу, чтобы пользователь снова заходил в систему, если он уже вошел в систему и не вышел из системы в последний раз, когда использовал приложение. По этой причине я использую локальное хранилище, чтобы проверить, вошел ли пользователь в систему. Я попытался поместить этот код в блок запуска.
$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')
Могу ли я, пожалуйста, получить помощь от того, что я мог пропустить, что привело к бесконечному циклу?
Посмотрите на документацию по 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;
}