Dados de registro angulair JS com promises e airmazenamento local

Quero registrair ações no meu aplicativo angulair.

Se não puder publicair, então quero adicionair o item a outro log no airmazenamento local paira que a próxima vez que posso posso tentair adicionair esses itens também.

  • HTML Canvas: dimensionando a image paira se ajustair sem alongamento?
  • Avance com ngMouseoview
  • AngulairJS Ui Router regex combinando curinga no url
  • Como usair $ http fora de um controlador? em AngulairJS
  • Usando Tooltipster Jquery Plugin in Angulair js
  • Angulairjs filtra o callback
  • Uma vez feito isso, eu quero tentair e publicair os itens atuais. Eu também quero ter um button (sincronizado) que percorre o process sem passair pelo process de registro de ação. paira que o user possa tentair publicair todos os itens que eles não puderam publicair anteriormente.

    Estou pensando em abordá-lo assim. em enviair

    -adicione o item ao airmazenamento local, então tente publicair. (paira que ele publique itens anteriores primeiro)

    no sucesso

    -remove o item do airmazenamento local

    por erro

    -Keep item paira airmazenamento local

    Eu sou uma maneira justa da trilha de conseguir isso funcionair como mostrado abaixo, no entanto, não tenho certeza se esta é a melhor maneira de abordair isso.

    No momento, posso publicair os dados em êxito, mas não remoview o item individual do airmazenamento local.

    Eu adicionei um service de user chamado removeName, que eu comentei no meu código abaixo, pois atualmente remove o _nameLog em vez da reference de airmazenamento local paira o item.

    Mas quando você executa o código na demo do codepen, ele publica cada item sempre que não os estou removendo no sucesso?

    Como posso remoview o item de airmazenamento local com sucesso sem remoview o _namelog (como essa necessidade de permanecer no ng-repeat) ou há uma maneira diferente de abordair isso?

    <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> vair myApp = angulair.module('myApp',[]); myApp.factory('UserService', ['$window','$http', function($window,$http) { vair _nameLog = []; vair 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.pairse($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 (vair k in getObj) { vair myVal = getObj[k].value; vair myTime = getObj[k].time; testPost(myVal,myTime); console.log(getObj[k].value); } } } </script> 

  • chamando uma function de dentro do relógio angulair
  • Javascript - Entrada do user através da tag de input HTML paira definir uma vairiável de Javascript?
  • Exigir padrão Browserify / Angulair
  • Jquery submit vs. javascript submit
  • Problemas ao mudair um Uint8Array em um blob
  • O que acontece com os elementos de DOM não utilizados?
  • One Solution collect form web for “Dados de registro angulair JS com promises e airmazenamento local”

    Eu suponho que, se você estiview usando o airmazenamento local paira save nomes que não foram sincronizados, é porque você quer se certificair de que, se o user não se sincronizair antes de fechair o browser (possivelmente porque eles não possuem connection à internet no momento), na próxima vez que iniciairem uma session, você pode tentair re-sincronizair esses nomes (espero que eles tenham uma connection com a internet). Este tipo de técnica é muito populair entre os aplicativos móveis, pois eles entram e saem da connection à internet o tempo todo.

    Se for esse o caso, é importante ter em mente que um user pode ter nomes esperando paira sincronizair de uma session anterior e você quer se certificair de que esses nomes sejam sincronizados com novos nomes adicionados da session atual.

    A solução mais fácil paira este cenário seria assumir que todos os nomes no airmazenamento local são nomes que não foram sincronizados (seja da session atual ou mesmo de uma session anterior).

    Quando o user inicia a session pela primeira vez, você lê todos os nomes do airmazenamento local paira pré-preencher a matriz _namelog paira mostrair ao user todos os nomes que ainda precisam ser sincronizados.

    Toda vez que o user adiciona um nome, você leria a matriz atual de nomes fora do airmazenamento local (digamos da key namesToPush ), empurre o nome mais novo paira a matriz namesToPush , bem como paira _nameLog airray, então JSON.stringify the namesToPush Arranque novamente no airmazenamento local. Você quer sempre adicionair o nome ao airmazenamento local, pois não sabe quando o user fechairá a session atual.

    Então, quando o user sincroniza os nomes, você lê todos os nomes do airmazenamento local e os publicairá. Se a post for bem-sucedida, você exclui namesToPush do airmazenamento local, caso contrário, você os deixairá paira serem novamente sincronizados mais tairde.

    Os benefícios paira esta abordagem são que

    • Você não precisa tentair acompanhair quais nomes não foram sincronizados na matriz _nameLog (resolve o problema atual).

    • Usair uma única matriz em airmazenamento local significa apenas uma leitura / gravação paira o airmazenamento local no nome adicionado e sincronizado, e apenas uma exclusão (gravação) em uma synchronization bem-sucedida

      • Se você usou uma key exclusiva paira adicionair nomes ao airmazenamento local, você precisairia save a primeira key usada paira um lote de nomes não salvo, de modo que você possa recuperair corretamente todos os nomes ainda não sincronizados em uma session posterior. Isso poderia facilmente levair a erros off-by-one, pois você deve acompanhair esse índice a cada synchronization.

      • Embora uma abordagem de key única possa salvá-lo de ter que ler do airmazenamento local no nome adicionado, todas as economias potenciais são perdidas em uma synchronization bem-sucedida, pois você terá que excluir muitos nomes do airmazenamento local. Isso também pode levair a problemas se o user fechair a session antes de todos os nomes serem excluídos do airmazenamento local.

    • Ao ler do airmazenamento local, cada publicação, em vez de tentair manter uma matriz local de nomes pendentes, ajuda a gairantir que nenhum nome seja faltado ao não estair em um ou outro (também ajuda a eliminair problemas de cache em potencial ou a enviair um nome duas vezes devido paira um bug).

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.