Atualizado: 21/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Serviços em Angular

Os serviços no Angular representam uma ampla gama de classes que executam tarefas específicas, como registro de logs, manipulação de dados, entre outras.

Ao contrário dos componentes e diretivas, os serviços não interagem diretamente com a exibição, ou seja, com a marcação HTML, não tendo influência direta sobre ela. Eles são responsáveis por realizar tarefas bem definidas e bastante específicas.

Funções padrão dos serviços:

  • Fornecimento de dados para a aplicação. Um serviço pode armazenar dados na memória ou buscar esses dados de uma fonte externa, como um servidor.
  • Um serviço pode atuar como um canal de interação entre diferentes componentes da aplicação.
  • O serviço pode encapsular a lógica de negócios, realizar cálculos ou tarefas relacionadas a registros de logs, que é mais eficiente retirar dos componentes. Dessa forma, o código dos componentes permanece focado apenas na interação com a visualização. Além disso, isso ajuda a evitar a repetição de código, caso seja necessário executar a mesma tarefa em diferentes componentes e classes.

Por exemplo, vamos adicionar um novo arquivo na pasta src/app chamado data.service.ts. Esse arquivo conterá o código do serviço. Seguindo as convenções, o nome do arquivo deve conter o nome do serviço seguido da expressão .service.

helloapp/
├── src/
│   ├── app/
│   │   ├── app.component.ts
│   │   ├── data.service.ts
│   ├── main.ts
│   ├── index.html
├── angular.json
├── package-lock.json
├── package.json
└── tsconfig.json

Se o nome do serviço for composto por várias palavras, todas devem ser escritas com letras minúsculas e separadas por traços no nome do arquivo. Por exemplo, se o serviço for chamado SpecialSuperHeroService, o nome do arquivo será special-super-hero.service.ts.

Vamos definir o seguinte serviço nesse arquivo:

export class DataService {
  private data: string[] = ["Tom", "Bob", "Sam"];

  getData(): string[] {
    return this.data;
  }

  addData(name: string) {
    this.data.push(name);
  }
}

No serviço, temos um array de dados e métodos para manipulá-lo. Em uma aplicação real, esses dados poderiam ser obtidos de um servidor ou de algum armazenamento externo.

Agora, vamos definir o código do componente:

import { Component, Inject } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { DataService } from "./data.service";

@Component({
  selector: "my-app",
  standalone: true,
  imports: [FormsModule],
  providers: [DataService],
  template: `<div>
    <div>
      <input [(ngModel)]="name" />
      <button (click)="addItem(name)">Adicionar</button>
    </div>
    <ul>
      @for(item of items; track $index){
      <li>{{ item }}</li>
      }
    </ul>
  </div>`,
})
export class AppComponent {
  items: string[] = [];
  name: string = "";

  constructor(@Inject(DataService) private dataService: DataService) {}

  addItem(name: string) {
    this.dataService.addData(name);
  }

  ngOnInit() {
    this.items = this.dataService.getData();
  }
}

Para utilizar o serviço em um componente, além de importá-lo:

import { DataService } from "./data.service";

Também é necessário adicioná-lo à coleção providers do componente:

providers: [DataService];

Todos os serviços que forem utilizados devem ser adicionados à coleção providers. Isso define o provedor do serviço, que será utilizado para obtê-lo. A partir daí, podemos usar o mecanismo de injeção de dependência do Angular para obter o objeto do serviço no construtor do componente e utilizá-lo conforme necessário:

constructor(@Inject(DataService) private dataService: DataService) {}

Para carregar os dados, é implementado o método ngOnInit() da interface OnInit, que é chamado após o construtor.

E, como estamos usando a diretiva ngModel para trabalhar com elementos de formulário, é necessário importar o módulo FormsModule:

import { FormsModule } from "@angular/forms";

@Component({
    imports: [FormsModule],
    ...
})

Assim, poderemos exibir os dados e adicionar novos elementos através do serviço.

Serviços em Angular

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com