Tengo un componente Angular2 en ese componente, actualmente tiene un montón de campos que tienen @Input () aplicado antes de ellos para permitir el enlace a esa propiedad, es decir
@Input() allowDay: boolean;
Lo que me gustaría hacer es vincularme a una propiedad con get / set, de modo que pueda hacer otra lógica en el setter, algo como lo siguiente
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
¿Cómo haría esto en Angular2?
Según la sugerencia de Thierry Templier, lo cambié a, pero eso arroja el error No se puede vincular a 'allowDay' ya que no es una propiedad nativa conocida:
//@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 (...) `.Respuestas:
Puede configurar el @Input en el setter directamente, como se describe a continuación:
Vea este plunkr: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview .
fuente
directives
atributo del componente donde desea usarla ... Actualicé mi respuesta.setter
habrá NO ser provocados por mutaciones a valores que son pasados por referencia (es decir, que empujan a una matriz, mutando un objeto, etc.). Debería reemplazar todo el valor que se pasa comoInput
parasetter
que se active nuevamente.Si está interesado principalmente en implementar la lógica solo en el setter :
La importación de
SimpleChanges
no es necesaria si no importa qué propiedad de entrada se modificó o si solo tiene una propiedad de entrada.Doc Angular: OnChanges
de otra manera:
fuente
@Input
propiedades y desea llamar a una rutina cuando alguna de ellas ha cambiado. Por lo tanto, se necesita menos código.@Paul Cavacas, tuve el mismo problema y lo resolví configurando el
Input()
decorador sobre el captador.Vea este plunker: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview
fuente
Respuesta aceptada actualizada a angular 7.0.1 en stackblitz aquí: https://stackblitz.com/edit/angular-inputsetter?embed=1&file=src/app/app.component.ts
directives
ya no están en las opciones de decorador de componentes. Por lo tanto, he proporcionado una directiva secundaria al módulo de la aplicación.gracias @ thierry-templier !
fuente