As diretivas definem um conjunto de instruções aplicadas ao renderizar o código HTML. Uma diretiva é representada por uma classe com metadados de diretiva. No TypeScript, o decorador @Directive
No Angular, existem três tipos de diretivas:
: Um componente também é essencialmente uma diretiva, e o decoradorComponentes
expande as funcionalidades do decorador@Component
adicionando recursos para trabalhar com templates.@Directive
: Estas diretivas alteram o comportamento de um elemento já existente ao qual são aplicadas. Por exemplo, as diretivas embutidas no Angular, comoDe atributo
,ngModel
engStyle
.ngClass
: Elas alteram a estrutura do DOM adicionando, modificando ou removendo elementos HTML. Exemplos são as diretivasEstruturais
engFor
.ngIf
Diretivas de Atributo Embutidas ngClass e ngStyle - Angular
ngClass
A diretiva ngClass
[ngClass]="{
'classe1': true/false,
'classe2': true/false,
...
}"
Para usar essa diretiva, é necessário importar a classe NgClass
@angular/common
Por exemplo, podemos definir o seguinte componente:
import { Component } from "@angular/core";
import { NgClass } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [NgClass],
template: `<div [ngClass]="{verdanaFont: true}">
<h1>Hello Angular</h1>
<p [ngClass]="{segoePrintFont: true}">
A aplicação Angular é composta por componentes
</p>
</div>`,
styles: [
`.verdanaFont {font-size: 13px; font-family: Verdana;}`,
`.segoePrintFont {font-size: 14px; font-family: "Segoe Print";}`
]
})
export class AppComponent { }
Na seção de estilos do componente, foram definidos dois estilos que estabelecem diferentes propriedades de fonte: verdanaFont
segoePrintFont
No template, a diretiva [ngClass]="{verdanaFont: true}"
true
false
verdanaFont
div
No entanto, dentro do bloco div
div
segoePrintFont

Em vez de valores fixos (true
false
import { Component } from "@angular/core";
import { NgClass } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [NgClass],
template: `<div [ngClass]="{verdanaFont: isVerdana}">
<h1>Hello Angular</h1>
<p [ngClass]="{segoePrintFont: isSegoe}">
A aplicação Angular é composta por componentes
</p>
</div>`,
styles: [
`.verdanaFont {font-size: 13px; font-family: Verdana;}`,
`.segoePrintFont {font-size: 14px; font-family: "Segoe Print";}`
]
})
export class AppComponent {
isVerdana = true;
isSegoe = true;
}
Alternativamente, podemos usar as seguintes expressões de vinculação:
<div [class.verdanaFont]="true">
<h1>Hello Angular</h1>
<p [class.verdanaFont]="false" [class.segoePrintFont]="true">
A aplicação Angular é composta por componentes
</p>
</div>
A expressão [class.verdanaFont]="true"
verdanaFont
No entanto, com ngClass
import { Component } from "@angular/core";
import { NgClass } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [NgClass],
template: `<div [ngClass]="currentClasses">
<h1>Hello Angular</h1>
<p>
A aplicação Angular é composta por componentes
</p>
</div>`,
styles: [
`.verdanaFont {font-size: 13px; font-family: Verdana;}`,
`.navyColor {color: navy;}`
]
})
export class AppComponent {
isVerdana = true;
isNavy = true;
currentClasses = {
verdanaFont: this.isVerdana,
navyColor: this.isNavy
};
}
Nesse caso, as classes verdanaFont
navyColor

ngStyle
A diretiva ngStyle
import { Component } from "@angular/core";
import { NgStyle } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [NgStyle],
template: `<div [ngStyle]="{'font-size':'13px', 'font-family':'Verdana'}">
<h1>Hello Angular</h1>
<p [ngStyle]="{'font-size':'14px', 'font-family':'Segoe Print'}">
A aplicação Angular é composta por componentes
</p>
</div>`
})
export class AppComponent { }
Para usar a diretiva ngStyle
NgStyle
@angular/common
De forma semelhante, também podemos aplicar estilos usando propriedades do objeto style
<div [style.fontSize]="'13px'" [style.fontFamily]="'Verdana'">
<h1>Hello Angular</h1>
<p [style.fontSize]="'14px'" [style.fontFamily]="'Segoe Print'">
A aplicação Angular é composta por componentes
</p>
</div>
Também podemos estabelecer uma vinculação dinâmica.
Alteração Dinâmica de Estilos
As diretivas ngClass
ngStyle
import { Component } from "@angular/core";
import { NgClass } from "@angular/common";
@Component({
selector: "my-app",
standalone: true,
imports: [NgClass],
template: `<div [ngClass]="{invisible: visibility}">
<h1>Hello Angular</h1>
<p>
A aplicação Angular é composta por componentes
</p>
</div>
<button (click)="toggle()">Toggle</button>`,
styles: [`.invisible {display: none;}`]
})
export class AppComponent {
visibility: boolean = true;
toggle() {
this.visibility = !this.visibility;
}
}
A expressão [ngClass]="{invisible: visibility}"
invisible
visibility
Como alternativa, também poderíamos usar a seguinte expressão:
<div [class.invisible]="visibility">
Ou ainda:
<div [style.display]="visibility ? 'block' : 'none'">