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.