在成功登录调用中设置AngularLocalForage

时间:2017-08-10 11:11:40

标签: angularjs asynchronous local-storage localforage

我创建了基于令牌的授权。登录后,它将令牌存储在localStorage中,但我意识到localStorage是同步的,这不是我想要的单页应用程序。所以我看看Angular Local Forage,正如他们所说的那样是异步。

首先,我下载localForage和angularLocalForage并将其添加到索引

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

接下来,我在app.js中添加模块

'LocalForageModule'

在loginService成功调用时我添加了以下行:

$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不是函数       at new(ExternalCtrl.js:11)       在Object.invoke(

2 个答案:

答案 0 :(得分:1)

正如您在documentation中看到的,获取值的方法是getItem(),设置值的方法是setItem()

获取项目:

var authData = $localForage.getItem('authorization');

设置项目:

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

答案 1 :(得分:1)

根据doc

使用localForage没有get()和set()方法,应该使用getItem()和setItem()并且它们是异步的,promise。

$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
});