Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Criando Diretivas Personalizadas no Angular | Mastering Angular Directives and Pipes
Introdução ao Angular

bookCriando Diretivas Personalizadas no Angular

O Angular possui um conjunto de diretivas integradas como ngIf, ngFor e ngClass. No entanto, você também pode criar sua própria diretiva personalizada para lidar com tarefas específicas em sua aplicação. Veja a seguir como construir uma diretiva personalizada com um exemplo prático.

Gerar a Diretiva Personalizada

Primeiramente, é uma boa prática organizar seu código criando uma pasta dedicada para suas diretivas. Vamos chamá-la de directives.

Este comando cria uma nova pasta chamada directives dentro do diretório app e adiciona o novo arquivo da diretiva dentro dela:

  • highlight-on-complete.directive.ts – contém a lógica da diretiva;

  • highlight-on-complete.directive.spec.ts – arquivo de teste unitário (você pode excluí-lo se não for necessário).

Veja como é a estrutura básica da diretiva:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Definir o Comportamento da Diretiva

Esta diretiva irá destacar um elemento de tarefa em verde se ele estiver marcado como concluído. Caso contrário, os estilos serão removidos.

Para informar ao Angular que esta classe é uma diretiva, utilizamos o decorador @Directive:

@Directive({
  selector: '[appHighlightOnComplete]'
})

O seletor [appHighlightOnComplete] indica que a diretiva será usada como um atributo, e não como uma tag ou diretiva estrutural.

No seu HTML, você irá aplicá-la assim:

<div [appHighlightOnComplete]="task.completed"></div>

Fazer a Diretiva Reagir a Mudanças

Para detectar alterações na entrada completed, implementamos a interface OnChanges:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Também definimos uma propriedade de entrada para receber o valor do componente:

highlight-on-complete.ts

highlight-on-complete.ts

copy

O que isso faz:

  • Informa ao Angular que o valor será fornecido a partir do template (anteriormente, passamos task.complete pelo template);

  • Vincula a propriedade interna completed da diretiva ao valor passado pelo template;

  • Define um valor padrão de true (que será substituído assim que os dados reais forem recebidos).

Acessar o DOM com Segurança

O Angular utiliza injeção de dependência para fornecer acesso ao DOM e às ferramentas de renderização.

No construtor, injetamos:

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef nos fornece uma referência ao elemento DOM hospedeiro. Renderer2 permite modificar estilos e atributos de forma segura, sem manipular diretamente o DOM.

Reagir a Mudanças com ngOnChanges

Agora, vamos implementar a lógica principal em ngOnChanges, que é executada sempre que o valor de entrada é alterado.

Implementação completa:

highlight-on-complete.ts

highlight-on-complete.ts

copy

O método ngOnChanges é acionado sempre que o Angular detecta alterações nas propriedades de entrada da diretiva.

Neste caso, ele responde a atualizações do valor completed passado pelo template. Se completed for true, a diretiva adiciona uma borda verde e um fundo verde claro ao elemento. Se for false, esses estilos são removidos, retornando o elemento à sua aparência original. Isso fornece uma indicação visual de tarefas concluídas.

Esta diretiva personalizada permite encapsular o comportamento de estilo de forma reutilizável e limpa. Agora, você pode aplicá-la a qualquer elemento do seu aplicativo, sem duplicar a lógica entre componentes. É um ótimo exemplo de como o sistema de diretivas do Angular pode ajudar a escrever um código mais modular e fácil de manter.

question mark

O que a diretiva highlight-on-complete faz?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

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

bookCriando Diretivas Personalizadas no Angular

O Angular possui um conjunto de diretivas integradas como ngIf, ngFor e ngClass. No entanto, você também pode criar sua própria diretiva personalizada para lidar com tarefas específicas em sua aplicação. Veja a seguir como construir uma diretiva personalizada com um exemplo prático.

Gerar a Diretiva Personalizada

Primeiramente, é uma boa prática organizar seu código criando uma pasta dedicada para suas diretivas. Vamos chamá-la de directives.

Este comando cria uma nova pasta chamada directives dentro do diretório app e adiciona o novo arquivo da diretiva dentro dela:

  • highlight-on-complete.directive.ts – contém a lógica da diretiva;

  • highlight-on-complete.directive.spec.ts – arquivo de teste unitário (você pode excluí-lo se não for necessário).

Veja como é a estrutura básica da diretiva:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Definir o Comportamento da Diretiva

Esta diretiva irá destacar um elemento de tarefa em verde se ele estiver marcado como concluído. Caso contrário, os estilos serão removidos.

Para informar ao Angular que esta classe é uma diretiva, utilizamos o decorador @Directive:

@Directive({
  selector: '[appHighlightOnComplete]'
})

O seletor [appHighlightOnComplete] indica que a diretiva será usada como um atributo, e não como uma tag ou diretiva estrutural.

No seu HTML, você irá aplicá-la assim:

<div [appHighlightOnComplete]="task.completed"></div>

Fazer a Diretiva Reagir a Mudanças

Para detectar alterações na entrada completed, implementamos a interface OnChanges:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Também definimos uma propriedade de entrada para receber o valor do componente:

highlight-on-complete.ts

highlight-on-complete.ts

copy

O que isso faz:

  • Informa ao Angular que o valor será fornecido a partir do template (anteriormente, passamos task.complete pelo template);

  • Vincula a propriedade interna completed da diretiva ao valor passado pelo template;

  • Define um valor padrão de true (que será substituído assim que os dados reais forem recebidos).

Acessar o DOM com Segurança

O Angular utiliza injeção de dependência para fornecer acesso ao DOM e às ferramentas de renderização.

No construtor, injetamos:

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef nos fornece uma referência ao elemento DOM hospedeiro. Renderer2 permite modificar estilos e atributos de forma segura, sem manipular diretamente o DOM.

Reagir a Mudanças com ngOnChanges

Agora, vamos implementar a lógica principal em ngOnChanges, que é executada sempre que o valor de entrada é alterado.

Implementação completa:

highlight-on-complete.ts

highlight-on-complete.ts

copy

O método ngOnChanges é acionado sempre que o Angular detecta alterações nas propriedades de entrada da diretiva.

Neste caso, ele responde a atualizações do valor completed passado pelo template. Se completed for true, a diretiva adiciona uma borda verde e um fundo verde claro ao elemento. Se for false, esses estilos são removidos, retornando o elemento à sua aparência original. Isso fornece uma indicação visual de tarefas concluídas.

Esta diretiva personalizada permite encapsular o comportamento de estilo de forma reutilizável e limpa. Agora, você pode aplicá-la a qualquer elemento do seu aplicativo, sem duplicar a lógica entre componentes. É um ótimo exemplo de como o sistema de diretivas do Angular pode ajudar a escrever um código mais modular e fácil de manter.

question mark

O que a diretiva highlight-on-complete faz?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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