Eu tenho um componente Angular2 nesse componente que atualmente possui um monte de campos que têm @Input () aplicado antes deles para permitir a ligação a essa propriedade, ou seja,
@Input() allowDay: boolean;
O que eu gostaria de fazer é vincular a uma propriedade com get / set, para que eu possa fazer alguma outra lógica no setter, algo como o seguinte
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
como eu faria isso no Angular2?
Com base na sugestão de Thierry Templier, eu mudei para, mas isso gera o erro Não é possível vincular a 'allowDay', pois não é uma propriedade nativa conhecida:
//@Input() allowDay: boolean;
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
@Input('allowDay') set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
[allowDay]="....". If the field (setter) name and the property name you want to use for binding are the same, you can omit the parameter for
@Input (...) `.Respostas:
Você pode definir o @Input diretamente no configurador, conforme descrito abaixo:
Veja este artigo: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview .
fonte
directives
atributo do componente em que deseja usá-la ... Atualizei minha resposta.setter
irá NÃO ser desencadeada por mutações para valores que são passados por referência (isto é, que empurram para uma matriz, um objecto mutação, etc.). Você precisaria substituir todo o valor que está sendo passado como umInput
para osetter
gatilho novamente.Se você está interessado principalmente em implementar lógica apenas para o setter :
A importação de
SimpleChanges
não é necessária se não importa qual propriedade de entrada foi alterada ou se você possui apenas uma propriedade de entrada.Doc Angular: OnChanges
de outra forma:
fonte
@Input
propriedades e você deseja chamar uma rotina quando algum deles foi alterado. Portanto, é necessário menos código.@Paul Cavacas, tive o mesmo problema e resolvi colocando o
Input()
decorador acima do getter.Veja este plunker: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview
fonte
Resposta aceita atualizada para o angular 7.0.1 no stackblitz aqui: https://stackblitz.com/edit/angular-inputsetter?embed=1&file=src/app/app.component.ts
directives
não existem mais nas opções do decorador de componentes. Então, eu forneci sub-diretiva para o módulo app.obrigado @ thierry-templier !
fonte