Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Angular.copy

Eu peguei um tutorial que utiliza esse cmando para guardar informações de array e usar no localstorage, mas não entendi porque precisa disso:

angular.module('despesas', [])
    .factory('Despesas', function(){
        //factory como class-like
        var despesas = [];

        // Salvar no localStorage
        function salvarDB(){
            window.localStorage['despesas'] = angular.toJson(despesas);
        }

        return {
            list: function(){
                despesas = angular.fromJson(window.localStorage['despesas'] || '[]');
                return despesas;
            },

            add: function(despesa){
                despesa.id = new Date().getTime().toString();

                switch(despesa.categoria)
                {
                    case "Lazer":
                        despesa.categoria_icone = "ion-ios-game-controller-b";
                    break;
                    case "Saúde":
                        despesa.categoria_icone = "ion-medkit";
                    break;
                    case "Mercado":
                        despesa.categoria_icone = "ion-ios-cart";
                    break;
                }

                var copia = {};
                angular.copy(despesa, copia);
                despesas.push(copia);
                salvarDB();
            },

            delete: function(despesaId){
                for (var i = 0; i < despesas.length; i++){
                    if (despesas[i].id === despesaId){
                        despesas.splice(i, 1);
                    }
                }
                salvarDB();
            }
        };        
    });
2 respostas
solução!

No Javascript as variáveis são passadas por referência, então se a variável "despesa" sofrer alguma alteração, a cópia guardada no array de "despesas" também vai ser impactada.

Fazendo uma cópia, se cria um objeto novo sem vínculo com o original. Então a idéia seria garantir que o conteúdo não vai ter alterações depois de adicionado no array.

O resto do código não tem segredo. O módulo exporta os métodos de "list", "add" e "delete". Internamente, ele tem o array de despesas, e o método de gravar no localStorage.

Aqui tem um link que explica melhor o angular.copy

http://davidcai.github.io/blog/posts/copy-vs-extend-vs-merge/

Muito obrigada, era essa a minha dúvida. Então sempre tem que fazer uma cópia do array?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software