Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Criando um Serviço Personalizado no Angular | Services and Dependency Injection in Angular
Introdução ao Angular

bookCriando um Serviço Personalizado no Angular

Criando um Serviço

O Angular oferece um comando de CLI conveniente para gerar rapidamente um serviço, configurando os arquivos e importações necessários:

Após executar este comando, o Angular cria dois arquivos:

  • task.service.ts — o arquivo do serviço propriamente dito;

  • task.service.spec.ts — um arquivo de teste (pode ser excluído).

Veja o conteúdo inicial de task.service.ts:

task-service.ts

task-service.ts

copy

O decorador @Injectable informa ao Angular que este serviço pode ser injetado em outras classes.

A parte providedIn: 'root' significa que o Angular irá registrar automaticamente o serviço no módulo raiz e criar uma única instância dele para todo o aplicativo.

Note
Definição

Singleton é um padrão de projeto que garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela.

Componente A, Componente B ou qualquer outro componente — todos eles receberão a mesma instância do serviço. Isso é muito conveniente porque permite armazenar dados compartilhados (como uma lista de tarefas) e evitar duplicação de lógica.

É por isso que um serviço se torna a única fonte de verdade para uma parte específica da lógica ou dos dados do seu aplicativo. Se tiver interesse, você pode aprender mais sobre o padrão singleton neste artigo.

Adicionando Lógica ao Serviço

Vamos avançar para a construção da lógica do seu serviço. Veja o que ele deve fazer:

  • Armazenar uma lista de tarefas;

  • Retornar a lista de tarefas;

  • Excluir tarefas;

  • Alternar o status de conclusão das tarefas.

Primeiro, vamos definir como é uma tarefa criando uma interface TypeScript:

task-interface.ts

task-interface.ts

copy

Esta interface ajuda a definir claramente a estrutura de uma tarefa — inclui um id, um título e um status de conclusão. Você ainda não utilizou interfaces, mas adicionar uma aqui torna o código mais fácil de entender e trabalhar.

Agora vamos construir o serviço que gerencia sua lista de tarefas:

task-service.ts

task-service.ts

copy

Neste exemplo, os dados das tarefas são armazenados diretamente no código dentro de um array privado tasks.

Para permitir que outras partes da aplicação acessem a lista de tarefas, é utilizado o método getTasks(). Ele retorna uma cópia do array usando a sintaxe spread ([...]), o que ajuda a proteger os dados originais contra alterações acidentais.

O método deleteTask(id: number) remove uma tarefa filtrando aquela com o ID correspondente, atualizando a lista.

Outro método importante é o toggleTaskStatus(id: number). Ele localiza a tarefa pelo seu ID e alterna seu status de conclusão — se a tarefa estava marcada como concluída (true), torna-se não concluída (false), e vice-versa.

Note
Nota

Você pode reconhecer grande parte dessa lógica do seu TaskListComponent. Agora, tudo foi movido para o TaskService, o que ajuda a organizar seus componentes e mantém a lógica centralizada.

Este serviço agora é a base que permite que seus componentes interajam com a lista de tarefas — sem duplicar a lógica.

1. Por que criar um serviço no Angular?

2. O que significa providedIn: 'root' no decorador @Injectable?

3. Por que você retorna [...this.tasks] em vez de apenas this.tasks em getTasks()?

question mark

Por que criar um serviço no Angular?

Select the correct answer

question mark

O que significa providedIn: 'root' no decorador @Injectable?

Select the correct answer

question mark

Por que você retorna [...this.tasks] em vez de apenas this.tasks em getTasks()?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you show me the code for the Task interface and service methods?

Why do we return a copy of the tasks array instead of the original?

How do components use this service to access or modify the task list?

Awesome!

Completion rate improved to 3.13

bookCriando um Serviço Personalizado no Angular

Deslize para mostrar o menu

Criando um Serviço

O Angular oferece um comando de CLI conveniente para gerar rapidamente um serviço, configurando os arquivos e importações necessários:

Após executar este comando, o Angular cria dois arquivos:

  • task.service.ts — o arquivo do serviço propriamente dito;

  • task.service.spec.ts — um arquivo de teste (pode ser excluído).

Veja o conteúdo inicial de task.service.ts:

task-service.ts

task-service.ts

copy

O decorador @Injectable informa ao Angular que este serviço pode ser injetado em outras classes.

A parte providedIn: 'root' significa que o Angular irá registrar automaticamente o serviço no módulo raiz e criar uma única instância dele para todo o aplicativo.

Note
Definição

Singleton é um padrão de projeto que garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela.

Componente A, Componente B ou qualquer outro componente — todos eles receberão a mesma instância do serviço. Isso é muito conveniente porque permite armazenar dados compartilhados (como uma lista de tarefas) e evitar duplicação de lógica.

É por isso que um serviço se torna a única fonte de verdade para uma parte específica da lógica ou dos dados do seu aplicativo. Se tiver interesse, você pode aprender mais sobre o padrão singleton neste artigo.

Adicionando Lógica ao Serviço

Vamos avançar para a construção da lógica do seu serviço. Veja o que ele deve fazer:

  • Armazenar uma lista de tarefas;

  • Retornar a lista de tarefas;

  • Excluir tarefas;

  • Alternar o status de conclusão das tarefas.

Primeiro, vamos definir como é uma tarefa criando uma interface TypeScript:

task-interface.ts

task-interface.ts

copy

Esta interface ajuda a definir claramente a estrutura de uma tarefa — inclui um id, um título e um status de conclusão. Você ainda não utilizou interfaces, mas adicionar uma aqui torna o código mais fácil de entender e trabalhar.

Agora vamos construir o serviço que gerencia sua lista de tarefas:

task-service.ts

task-service.ts

copy

Neste exemplo, os dados das tarefas são armazenados diretamente no código dentro de um array privado tasks.

Para permitir que outras partes da aplicação acessem a lista de tarefas, é utilizado o método getTasks(). Ele retorna uma cópia do array usando a sintaxe spread ([...]), o que ajuda a proteger os dados originais contra alterações acidentais.

O método deleteTask(id: number) remove uma tarefa filtrando aquela com o ID correspondente, atualizando a lista.

Outro método importante é o toggleTaskStatus(id: number). Ele localiza a tarefa pelo seu ID e alterna seu status de conclusão — se a tarefa estava marcada como concluída (true), torna-se não concluída (false), e vice-versa.

Note
Nota

Você pode reconhecer grande parte dessa lógica do seu TaskListComponent. Agora, tudo foi movido para o TaskService, o que ajuda a organizar seus componentes e mantém a lógica centralizada.

Este serviço agora é a base que permite que seus componentes interajam com a lista de tarefas — sem duplicar a lógica.

1. Por que criar um serviço no Angular?

2. O que significa providedIn: 'root' no decorador @Injectable?

3. Por que você retorna [...this.tasks] em vez de apenas this.tasks em getTasks()?

question mark

Por que criar um serviço no Angular?

Select the correct answer

question mark

O que significa providedIn: 'root' no decorador @Injectable?

Select the correct answer

question mark

Por que você retorna [...this.tasks] em vez de apenas this.tasks em getTasks()?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 2
some-alt