2017-08-10 49 views
0

我創建了基於令牌的授權。登錄後,它將令牌存儲在localStorage中,但我意識到localStorage是同步的,這不是我想要的單頁面應用程序。所以我看着Angular Local Forage,他們說這是異步的。設置AngularLocalForage成功登錄電話

首先我下載localForage和angularLocalForage和指數增加它

<script src="public/scripts/angular/localforage.js"></script> 
<script src="public/scripts/angular/angular-localForage.js"></script> 

接下來,我加入app.js模塊

'LocalForageModule' 

在login服務的成功調用我添加以下行:

$localForage.set('authorization', { 
    token: response.data.data.attributes.token, 
    nick: 'other values..if neccessary' 
}); 

並在我的外部控制器,它包裹整個頁面我加$localForage get方法:

'use strict'; 
app.controller('ExternalCtrl', ['$scope', '$localForage', 
function($scope, $localForage) { 

    $scope.authentication = {}; 

    $scope.authentication = { 
     isAuth: false 
    }; 

    var authData = $localForage.get('authorization'); 
    if(authData) { 
     $scope.authentication.isAuth = true; 
     console.log($scope.authentication.isAuth); 
    } 

} 
]); 

不幸的是,這並不工作,使所有網頁顯示不出來它會導致這個錯誤:

TypeError: $localForage.get is not a function at new (ExternalCtrl.js:11) at Object.invoke (

回答

1

Acording的doc

有沒有get()和set()方法localForage,應該使用使用的getItem( )和setItem(),它們是異步的,承諾。

$localForage.setItem('authorization', { 
    token: response.data.data.attributes.token, 
    nick: 'other values..if neccessary' 
}).then(function() { 
    //logged and stored data 
}); 

function loadData() { 
    //here load data 
} 

$localForage.getItem('authorization').then(function(authData) { 
    //we got a stored authData 
    loadData(); 
}, function() { 
    // not logged 
}); 
+0

您的解決方案是工作,但我仍然需要登錄後刷新頁面,logouting看到的變化,爲什麼後? – BT101

+0

只有在登錄服務存儲了數據後,您才需要重定向到記錄的頁面 – Fetrarij

+0

但是在我的主頁上,我爲記錄的人員提供了不同的東西,並且沒有根據'$ scope.authentication.isAuth = true;'進行登錄,並且當我通過有效的登錄名和密碼我仍然需要刷新頁面才能看到登錄用戶的內容,我該如何更改它? – BT101

1

正如你可以在documentation看到,該方法獲取值爲getItem(),設置值的方法爲setItem()

獲取項:

​​

設置項:

$localForage.set('authorization', { 
    token: response.data.data.attributes.token, 
    nick: 'other values..if neccessary' 
});