2015-04-06 1 views
0

У меня есть этот код:загрузка состояния в зависимости от локального хранения маркеров собственности - stateProvider, ионные/угловые JS

var app = angular.module('myApp', ['ionic']); 
app.config(function($stateProvider) { 
    $stateProvider 
     .state('login', { 
     url: '/', 
     templateUrl: 'login.html', 
     controller: 'loginController' 
     }) 
     .state('home', { 
     url: '/home', 
     templateUrl: 'home.html', 
     controller: 'homeController' 
     }); 
}); 
$urlRouterProvider.otherwise('/'); 

Как я могу добавить условие для состояния поставщика, чтобы проверить, если localstorage.token существует. Если да, вернитесь домой, войдите в систему

Теперь я все время хожу в состоянии входа в систему и там (loginController). Я проверяю, есть ли у меня или нет токен на localstorage. Я не доволен своей версией ... вот почему я хочу ее улучшить

ответ

0

В app.run вы можете добавить свою логику; это будет срабатывать при загрузке страницы и обновлении.

.run(function ($state) { 
    if(localStorage.token) $state.go('home'); 
    else $state.go('login'); 
}) 
+0

Спасибо, Джош, за ваш ответ. Я не думаю, что могу ... потому что это еще одна проблема ... app.config() вызывается перед app.run(); Поэтому в первый раз загрузите шаблон и контроллер, а затем app.run(). У вас есть другой подход? :) – godzo101

+0

Правильно, да ... он загрузит логин и переместится на родину. Это для пользователей, приземляющихся на главной странице да? Вы хотите, чтобы они пошли прямо, если они были auth'd, также переведите их на страницу входа в систему. Вы могли бы создать страницу холдинга и сделать свою логику маршрутизации там? –

+0

Я думаю, что другое состояние - это решение, но для пользователя может быть неприятно видеть белый экран или как эта страница выглядела бы, прежде чем попасть в приложение ... Я думал, что это возможно сделать в config() или установить что-то где я определяю состояния – godzo101

1

Я бы рекомендовал установить домашний маршрут по умолчанию и выполнить перенаправление, если нет токена. Таким образом, это будет ваш маршрут по умолчанию:

$urlRouterProvider.otherwise('/home'); 

И вы будете перенаправлять, если нет токена. Вы можете сделать это, наблюдая за события $ locationChangeStart в вашем ведении блока:

.run(function ($rootScope, $state) { 
    $rootScope.on('$locationChangeStart', function(event, next, current) { 
    // check for the user's token and that we aren't going to the login view 
    if(!localStorage.token && next.templateUrl != 'login.html'){ 
     // go to the login view 
     $state.go('login'); 
    } 
    } 
}) 

Это имеет дополнительное преимущество, ограничивая пользователя в целях авторизации, если они не прошла проверку подлинности.

+0

Я пробовал что-то вроде этого, но в этом случае незарегистрированный пользователь увидит сначала главную страницу на короткое время и только тогда перенаправит логин ... .config () сначала выполняется .run() – godzo101

+0

@ godzo101 Я работал над этим поведением, оставив заставку, пока приложение загружает и скрывает его в конце кода run(). – lastcommit

+0

спасибо! да. Я думаю, должно быть хорошо с заставкой :) – godzo101

Смежные вопросы