J'ai un composant Angular2 dans ce composant, il a actuellement un tas de champs qui ont @Input () appliqué avant eux pour permettre la liaison à cette propriété, c'est-à-dire
@Input() allowDay: boolean;
Ce que je voudrais faire est en fait de me lier à une propriété avec get / set, afin que je puisse faire une autre logique dans le setter, quelque chose comme ce qui suit
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
comment pourrais-je faire cela dans Angular2?
Sur la base de la suggestion de Thierry Templier, je l'ai changé en, mais cela génère l'erreur Can't bind to 'allowDay' car ce n'est pas une propriété native connue:
//@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 (...) `.Réponses:
Vous pouvez définir @Input directement sur le setter, comme décrit ci-dessous:
Voir ce plunkr: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview .
la source
directives
attribut du composant où vous souhaitez l'utiliser ... J'ai mis à jour ma réponse.setter
ne sera PAS déclenché par des mutations vers des valeurs qui sont passées par référence (ex: pousser vers un tableau, muter un objet, etc.). Vous devrez remplacer toute la valeur transmiseInput
pour que lesetter
se déclenche à nouveau.Si vous êtes principalement intéressé par l'implémentation de la logique sur le setter uniquement :
L'importation de
SimpleChanges
n'est pas nécessaire si la propriété d'entrée modifiée n'a pas d'importance ou si vous n'avez qu'une seule propriété d'entrée.Doc angulaire: OnChanges
autrement:
la source
@Input
propriétés et que vous voulez appeler une routine quand l'une d'elles a changé. Donc, moins de code nécessaire.@Paul Cavacas, j'ai eu le même problème et j'ai résolu en mettant le
Input()
décorateur au-dessus du getter.Voir ce plunker: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview
la source
Mise à jour de la réponse acceptée à angular 7.0.1 sur stackblitz ici: https://stackblitz.com/edit/angular-inputsetter?embed=1&file=src/app/app.component.ts
directives
ne sont plus dans les options du décorateur de composants. J'ai donc fourni une sous-directive au module d'application.merci @ thierry-templier !
la source