gpt4 book ai didi

javascript - 使用 localStorage 和 $localStorage 使用 Angular 1 存储字符串的不同值。

转载 作者:行者123 更新时间:2023-12-03 05:18:18 24 4
gpt4 key购买 nike

在我的 Angular Controller 中,我试图在从 API 端点返回时保存一个 token ,该 token 以字符串形式返回。对于本示例,我已将其替换为变量 testData。

var testData = "testdata"

$localStorage['jwtToken'] = testData
localStorage.setItem('jwtToken',testData)

对于第一行,存储的内容如下:

{"ngStorage-jwtToken" : ""testdata""}

首先是第二行:

{"jwtToken" : "testdata"}

我明白为什么键会改变,但我不明白的是为什么第一行存储在键值中的数据字符串周围有一个双“”。

有人以前遇到过这个吗?我做错了什么吗?

尽力添加下面的代码。

angular.module('app', [
'ngAnimate',
'ngAria',
'ngCookies',
'ngMessages',
'ngResource',
'ngSanitize',
'ngTouch',
'ngStorage',
'ui.router'
]);

app.controller('SigninFormController', ['$scope', '$http', '$state', '$localStorage',
function($scope, $http, $state, $localStorage) {
$scope.user = {};
$scope.authError = null;
$scope.login = function() {
$scope.authError = null;
// Try to login
$http.post('api/auth/login', {
email: $scope.user.email,
password: $scope.user.password
})
.then(function(response) {
if (response.status = 200 && response.data.token) {

var testData = "testdata"

$localStorage['jwtToken'] = testData
localStorage.setItem('jwtToken', testData)


/*
$localStorage['jwtToken'] = response.data.token
localStorage.setItem('jwtToken',response.data.token)
*/

$state.go('app.home');
} else {
$scope.authError.message
}

}, function(err) {
if (err.status == 401) {
$scope.authError = err.data.message
} else {
$scope.authError = 'Server Error';
}
});
};
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>



<body ng-controller="">
<div class="container w-xxl w-auto-xs" ng-controller="SigninFormController">

<div class="m-b-lg">
<div class="wrapper text-center">
<strong>Sign in to get in touch</strong>
</div>
<form name="form" class="form-validation">
<div class="text-danger wrapper text-center" ng-show="authError">
{{authError}}
</div>
<div class="list-group list-group-sm">
<div class="list-group-item">
<input type="email" placeholder="Email" class="form-control no-border" ng-model="user.email" required>
</div>
<div class="list-group-item">
<input type="password" placeholder="Password" class="form-control no-border" ng-model="user.password" required>
</div>
</div>
<button type="submit" class="btn btn-lg btn-primary btn-block" ng-click="login()" ng-disabled='form.$invalid'>Log in</button>
<div class="text-center m-t m-b"><a ui-sref="access.forgotpwd">Forgot password?</a></div>
<div class="line line-dashed"></div>
<p class="text-center"><small>Do not have an account?</small></p>
<a ui-sref="access.signup" class="btn btn-lg btn-default btn-block">Create an account</a>
</form>
</div>
<div class="text-center" ng-include="'tpl/blocks/page_footer.html'">

</div>
</div>
</body>

最佳答案

为什么要加双引号

我需要查看源代码,但很可能他们在字符串周围加引号的原因是这样他们可以使用 JSON.parse() 以便从存储中获取正确的对象/数组/字符串,而无需必须尝试找出类型。

基本思想:

localStorage.setItem('xxx', '"testData"');
var val1 = JSON.parse(localStorage.getItem('xxx'));

localStorage.setItem('yyy', '"testData"');
var val2 = JSON.parse(localStorage.getItem('{"foo" : "bar"}'));

为什么他们要在键名前面加上前缀?

他们可以循环遍历键并知道哪些本地存储键是 Angular ,哪些是其他的。他们可以填充他们的对象。

var myStorage = {};
Object.keys(localStorage).forEach(function(key){
if (key.indexOf("ngStorage")===0) {
myStorage[key.substr(10)] = JSON.parse(localStorage[key]);
}
});

关于javascript - 使用 localStorage 和 $localStorage 使用 Angular 1 存储字符串的不同值。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com