событие angular.preventDefault() при методе выполнения

#angularjs #ionic-framework

#angularjs #ионный фреймворк

Вопрос:

Я пытаюсь перенаправить пользователя в определенное состояние при запуске angular, но он не переходит к login, когда, если это true, вместо этого он переходит к routState по умолчанию

 .run(function ($ionicPlatform, $rootScope, $state) {

var authToken = window.localStorage.getItem('authToken')
var shouldChangePassword=window.localStorage.getItem('shouldChangePassword')
if (authToken == 'undefined' || shouldChangePassword == 'true') {
    event.preventDefault();
    $state.go('login');

    return;
}
.config(
//my routes

.state('login', {
           url: '/login',
           templateUrl: 'templates/account_login.html',
           controller: 'loginCtrl',
       })

 $urlRouterProvider.otherwise('/tab/category');
)
  

как я могу перенаправить на вход в систему и остановить переход приложения на маршрут по умолчанию

Комментарии:

1. вы проверили, соответствует ли условие в блоке if значению true?

2. да, условие верно, я проверил его с помощью открытых инструментов разработчика, он даже нажал $state.go(‘login’)

3. Он попадает в $state.go(‘login’)? Я думал, это то, чего ты хотел?

4. он попал в $state.go(‘login’); но он не переходит в это состояние, он переходит в $urlRouterProvider .в противном случае, что такое / tab / category’

5. событие не определено..

Ответ №1:

Вы могли бы попробовать подключиться к событию изменения состояния $stateChangeStart пользовательского интерфейса-маршрутизатора:

 .run(function ($ionicPlatform, $rootScope, $state) {

    $rootScope.$on('$stateChangeStart', function (event) {
        var authToken = window.localStorage.getItem('authToken');
        var shouldChangePassword=window.localStorage.getItem('shouldChangePassword');
        if (!authToken || shouldChangePassword) {
            event.preventDefault();
            $state.go('login');
        }
    });
  

Но вы могли бы рассмотреть возможность перемещения authToken и shouldChangePassword в отдельную службу и считывать / устанавливать значение из / в эту службу вместо чтения из localstorage для каждого изменения состояния