0

我创建了基于令牌的授权。登录后,它将令牌存储在 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'
});

在包装整个页面的外部控制器中,我添加了$localForageget 方法:

'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 (

4

2 回答 2

1

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

获取项目:

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

套装项目:

$localForage.set('authorization', {
    token: response.data.data.attributes.token,
    nick: 'other values..if neccessary'
});
于 2017-08-10T11:19:55.537 回答
1

根据文档

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
});
于 2017-08-10T11:20:03.707 回答