[英]localStorage: condition to prevent storing duplicated values in 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.