繁体   English   中英

存储的不同值使用Angular 1将字符串存储在localStorage和$ localStorage中。

[英]Different values stored storing a string with localStorage and $localStorage with Angular 1.

在我的角度控制器中,我试图从以字符串形式返回的API端点返回时保存令牌。 对于此示例,我已将其替换为变量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="mb-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 mt mb"><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"}'));

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

他们可以遍历键并知道哪些本地存储键是角度,还有哪些是别的。 他们可以填充对象。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM