Acredito que haja um erro de lógica no algoritmo utilizado pela professora.
No código da função construtora, como ela desenvolveu, os dados dos contatos nunca serão salvos no localStorage. A função setItem() sempre recebe null.
Acredito que haja um erro de lógica no algoritmo utilizado pela professora.
No código da função construtora, como ela desenvolveu, os dados dos contatos nunca serão salvos no localStorage. A função setItem() sempre recebe null.
Olá, Hugo.
Tudo bem?
Vamos dar uma olhada mais de perto no código para entender o que pode estar acontecendo. No construtor do ContatoService
, a lógica é a seguinte:
localStorage
.localStorage
, eles são convertidos de string para objeto e atribuídos à propriedade contatos
.localStorage
, a propriedade contatos
é definida como null
.contatos
é salva novamente no localStorage
.O problema que você mencionou parece estar relacionado ao fato de que, se contatosLocalStorage
for null
, a linha this.contatos = contatosLocalStorage || null;
fará com que this.contatos
seja null
. Em seguida, localStorage.setItem('contatos', JSON.stringify(this.contatos));
salvará null
no localStorage
, o que não é o comportamento desejado.
Para corrigir isso, você pode inicializar a propriedade contatos
com os contatos padrão se contatosLocalStorage
for null
. Aqui está uma versão ajustada do código:
import { Injectable } from '@angular/core';
interface Contato {
id: number;
nome: string;
telefone: string;
}
@Injectable({
providedIn: 'root'
})
export class ContatoService {
private contatos: Contato[] = [
{ id: 1, nome: 'Ana', telefone: '29 278869420' },
{ id: 2, nome: 'Ágata', telefone: '38 128451235' },
{ id: 3, nome: 'Bruno', telefone: '95 695521583' },
{ id: 4, nome: 'Beatriz', telefone: '25 854986459' },
{ id: 5, nome: 'Carlos', telefone: '94 543197849' },
{ id: 7, nome: 'Daniel', telefone: '56 613692441' },
];
constructor() {
// Tentar obter os dados do localStorage
const contatosLocalStorageString = localStorage.getItem('contatos');
const contatosLocalStorage =
contatosLocalStorageString ? JSON.parse(contatosLocalStorageString) : null;
// Se não houver contatos no localStorage, use os contatos padrão
this.contatos = contatosLocalStorage || this.contatos;
// Salvar os contatos no localStorage
localStorage.setItem('contatos', JSON.stringify(this.contatos));
}
obterContatos() {
return this.contatos;
}
}
Com essa alteração, se não houver contatos no localStorage
, a propriedade contatos
será inicializada com os contatos padrão e, em seguida, esses contatos serão salvos no localStorage
.
Veja se é isso mesmo se faz sentido, e aplique em seu código.
Espero ter ajudado e bons estudos!
Prezado Renan, agradeço o retorno. Sugiro que inclua a sua solução no curso porque alunos iniciantes podem não ver essa solução e ficarem perdidos.