Criando Diretivas de Atributo - Angular
As diretivas de atributo alteram o comportamento do elemento ao qual são aplicadas. Por exemplo, a diretiva ngClass
<div [ngClass]="{verdanaFont:true}">
Se necessário, podemos criar nossas próprias diretivas de atributo para atender a objetivos específicos. Vamos criar uma diretiva personalizada. Primeiro, adicione um novo arquivo na pasta src/app
bold.directive.ts
A estrutura do projeto:
helloapp/ ├── src/ │ ├── app/ │ │ ├── app.component.ts │ │ ├── bold.directive.ts │ ├── main.ts │ ├── index.html ├── angular.json ├── package-lock.json ├── package.json └── tsconfig.json
Agora, vamos ao código do componente principal para aplicar a diretiva:
import { Directive, ElementRef } from "@angular/core";
@Directive({
selector: "[bold]",
standalone: true
})
export class BoldDirective {
constructor(private elementRef: ElementRef) {
this.elementRef.nativeElement.style.fontWeight = "bold";
}
}
Uma diretiva é uma classe TypeScript comum à qual se aplica o decorador @Directive
"@angular/core"
ElementRef
Ao usar o decorador @Directive
[bold]
Note que a diretiva foi definida como um componente autônomo, utilizando o parâmetro standalone: true
O decorador @Directive
BoldDirective
private elementRef: ElementRef
Como o parâmetro é definido com a palavra-chave private
ElementRef
nativeElement
this.elementRef.nativeElement.style.fontWeight = "bold";
Agora, vamos ao código do componente principal para aplicar a diretiva:
import { Component } from "@angular/core";
import { BoldDirective } from "./bold.directive";
@Component({
selector: "my-app",
standalone: true,
imports: [BoldDirective],
template: `<div>
<p bold>Hello Angular</p>
<p>A aplicação Angular é composta por componentes</p>
</div>`
})
export class AppComponent {}
Neste exemplo, há dois parágrafos, e a diretiva é aplicada ao primeiro deles. Como o seletor [bold]
No entanto, a diretiva não funcionará automaticamente. Para utilizá-la, é necessário importá-la no componente:
import { BoldDirective } from "./bold.directive";
@Component({
imports: [BoldDirective],
...
})
Ao executar a aplicação, veremos a diretiva aplicada ao primeiro parágrafo.

Para gerenciar a estilização do elemento, o exemplo anterior utilizou o objeto ElementRef
Renderer2
Renderer2
import { Directive, ElementRef, Renderer2 } from "@angular/core";
@Directive({
selector: "[bold]",
standalone: true
})
export class BoldDirective {
constructor(private elementRef: ElementRef, private renderer: Renderer2) {
this.renderer.setStyle(this.elementRef.nativeElement, "font-weight", "bold");
}
}
Renderer2