Como usar o decorator @Attribute em Angular
O decorator @Attribute
permite passar dados de um componente pai para um componente filho de forma bem parecida com como é feito com o decorator @Input
.
Mas @Attribute
é bastante limitado em comparação com @Input
já que ele permite apenas string
estática.
Como usar
Primeiro, você deve decorar um parâmetro do constructor.
No código abaixo eu usei a palavra-chave readonly
apenas por questão de preferência, seu parâmetro não precisa ser “read-only” e você pode usar qualquer modificador de acesso que quiser.
@Component({
selector: "app-hello",
template: `{{ parameter }}`,
})
export class HelloComponent {
constructor(@Attribute("message") readonly parameter: string) {}
}
Então você pode passar uma simples string
estática como se fosse um atributo HTML normal. Note que o nome do atributo deve ser igual ao argumento passado para @Attribute
.
@Component({
selector: "app-root",
template: `<app-hello message="Hello"></app-hello>`,
})
export class AppComponent {}
Como NÃO usar
Você não pode usar data binding com @Attribute
. O código abaixo mostra 4 formas ERRADAS de usar este decorator.
@Component({
selector: "app-root",
template: `
<app-hello [attr.message]="'Hello'"></app-hello>
<app-hello [message]="'Hello'"></app-hello>
<app-hello message="{{ hello }}"></app-hello>
<app-hello [message]="hello"></app-hello>
`,
})
export class AppComponent {
hello = "World";
}
Considerações finais
Embora o decorator @Input
seja mais flexível, algumas vezes uma simples string
estática pode ser mais adequada. Nestas ocasiões o decorator @Attribute
pode ser bastante útil.
Eu espero que este artigo tenha sido útil.