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
directivesatributo del componente donde desea usarla ... Actualicé mi respuesta.setterhabrá 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 comoInputparasetterque se active nuevamente.Si está interesado principalmente en implementar la lógica solo en el setter :
La importación de
SimpleChangesno 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
@Inputpropiedades 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
directivesya 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