Tôi muốn ghi lại các hành động trong ứng dụng góc của mình.Dữ liệu nhật ký JS góc với lời hứa và lưu trữ cục bộ
Nếu tôi không thể đăng bài thì tôi muốn thêm mục vào nhật ký khác trong bộ nhớ cục bộ để lần sau tôi đăng, tôi cũng có thể thử và thêm các mục này.
Sau khi thực hiện xong, tôi muốn thử và đăng các mục hiện tại. Tôi cũng muốn có một nút (đồng bộ) chạy qua quá trình mà không phải trải qua quá trình đăng nhập hành động. để người dùng có thể thử và đăng tất cả các mục họ chưa thể đăng trước đó.
Tôi đang nghĩ đến việc tiếp cận nó như thế này. khi gửi
-thêm mục vào bộ nhớ cục bộ, sau đó thử đăng. (Để nó đăng tải các mặt hàng trước đó đầu tiên)
trên thành công
mục -Xoá từ local storage
về lỗi
mục -keep để lưu trữ địa phương
tôi một cách công bằng xuống theo dõi của việc này làm việc như hình dưới đây, tuy nhiên tôi không chắc chắn về việc liệu đây là cách tốt nhất để tiếp cận này.
Hiện tại tôi có thể đăng dữ liệu thành công nhưng không xóa mục riêng lẻ khỏi bộ nhớ cục bộ.
Tôi đã thêm vào một userService gọi là removeName mà tôi đã nhận xét trong mã dưới đây của tôi, vì nó hiện đang xóa _nameLog thay vì tham chiếu bộ nhớ cục bộ cho mục đó.
Nhưng khi bạn chạy mã trong codepen demo, nó sẽ đăng mỗi mục mỗi khi tôi không xóa chúng thành công?
Làm cách nào để loại bỏ mục lưu trữ cục bộ thành công mà không xóa _namelog (vì điều này cần phải nằm trong ng-lặp lại) hoặc có cách nào khác để tiếp cận điều này không?
<body ng-app="myApp">
<div ng-controller="MyCtrl">
<input type="text" ng-model="updatedname">
<input type="button" value="Change name" ng-click="changeName(updatedname)"/>
<br/>
Hello, {{name}}!
<ul>
<li ng-repeat="name in nameLog">{{name.value}} - {{name.time}}</li>
</ul>
<input type="button" value="sync" ng-click="syncPosts()"/>
</div>
</body>
<script>
var myApp = angular.module('myApp',[]);
myApp.factory('UserService', ['$window','$http', function($window,$http) {
var _nameLog = [];
var userService = {};
userService.name = "John";
userService.ChangeName = function (value) {
userService.name = value;
};
userService.logName = function (value) {
_nameLog.push ({
"value":value,
"time" :Date.now()
});
};
userService.removeName = function (value) {
return delete _nameLog[0];
};
userService.getNameLog = function(){
return _nameLog;
};
userService.setLS = function(key, value) {
$window.localStorage[key] = value;
},
userService.getLS = function(key, defaultValue) {
return $window.localStorage[key] || defaultValue;
};
userService.setObject = function(key, value) {
$window.localStorage[key] = JSON.stringify(value);
};
userService.getObject = function(key) {
return JSON.parse($window.localStorage[key] || '{}');
};
userService.testPost = function(myVal,myTime) {
return $http.post('http://jsonplaceholder.typicode.com/posts', {title:myVal,body:myTime,userId: 1});
};
return userService;
}]);
function MyCtrl($scope, UserService) {
$scope.name = UserService.name;
$scope.updatedname="";
$scope.changeName=function(data){
$scope.updateServiceName(data);
}
$scope.updateServiceName = function(name){
UserService.ChangeName(name);
UserService.logName(name);
$scope.name = UserService.name;
$scope.nameLog = UserService.getNameLog();
UserService.setLS('name', JSON.stringify($scope.nameLog));
getPosts();
}
$scope.syncPosts = function(){
getPosts();
}
function testPost(myVal,myTime) {
UserService.testPost(myVal,myTime)
.success(function(data, status, headers, config) {
console.log('success');
console.log(data);
//UserService.removeName();
})
.error(function(data, status, headers, config) {
console.log('error');
});
}
function getPosts(){
getObj = UserService.getObject('name');
for (var k in getObj) {
var myVal = getObj[k].value;
var myTime = getObj[k].time;
testPost(myVal,myTime);
console.log(getObj[k].value);
}
}
}
</script>
hãy nhớ điều này sẽ không hoạt động trên khác biệt. protocals .. http so với https (trừ khi tất nhiên, bạn sử dụng một số loại shim iframe) –
Umm, tôi thấy những gì bạn đang cố gắng làm, nhưng tôi không chắc chắn kịch bản lỗi bạn đang nói đến là gì. Tại sao không chỉ sử dụng interceptor để requeue bạn yêu cầu. Bằng cách này, bạn sẽ có thể đăng lại yêu cầu không thành công, đối với các tình huống cụ thể bằng cách tính đến vấn đề bạn gặp phải. – Shouvik
tôi nghĩ rằng cách tiếp cận tốt hơn sẽ là thêm nó vào cửa hàng địa phương chỉ khi lỗi ... theo cách đó bạn không cần phải tiếp tục thêm/xóa .. và chức năng thử lại bằng cách sử dụng $ interval – harishr