2015-04-06 65 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

對,是的......它會加載登錄,然後移到家中。這是針對登陸主頁面的用戶是嗎?如果他們被授權,您希望他們進入,否則將他們帶到登錄頁面。你可以創建一個持有頁面,並在那裏做你的路由邏輯? –

+0

我認爲另一個州是一個解決方案,但它可能會令用戶看到一個白色的屏幕或該頁面在進入應用程序之前看起來如何令人沮喪......我認爲可以在config()中設置它或設置一些東西我在哪裏定義狀態 – godzo101

1

我建議將home設置爲您的默認路由,並在沒有令牌時執行重定向。所以這將是你的默認路由:

$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