Ich habe eine Angular2-Komponente in dieser Komponente. Derzeit sind eine Reihe von Feldern mit @Input () versehen, um die Bindung an diese Eigenschaft zu ermöglichen, d. H.
@Input() allowDay: boolean;
Was ich tun möchte, ist tatsächlich mit get / set an eine Eigenschaft zu binden, damit ich im Setter eine andere Logik ausführen kann, etwa die folgende
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
Wie würde ich das in Angular2 machen?
Basierend auf dem Vorschlag von Thierry Templier habe ich es geändert, aber das löst den Fehler aus. Kann nicht an 'allowDay' gebunden werden, da es keine bekannte native Eigenschaft ist:
//@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 (...) `.Antworten:
Sie können den @Input direkt am Setter einstellen, wie unten beschrieben:
Siehe dieses Plunkr: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview .
quelle
directives
Attribut der Komponente einzufügen, in der Sie sie verwenden möchten ... Ich habe meine Antwort aktualisiert.setter
wird NICHT durch Mutationen zu Werten ausgelöst, die als Referenz übergeben werden (z. B. Pushing auf ein Array, Mutieren eines Objekts usw.). Sie müssten den gesamten Wert ersetzen , wird als übergebenInput
für diesetter
wieder auszulösen.Wenn Sie hauptsächlich daran interessiert sind, Logik nur für den Setter zu implementieren :
Der Import von
SimpleChanges
ist nicht erforderlich, wenn es keine Rolle spielt, welche Eingabeeigenschaft geändert wurde, oder wenn Sie nur eine Eingabeeigenschaft haben.Angular Doc: OnChanges
Andernfalls:
quelle
@Input
Eigenschaften hat und Sie eine Routine aufrufen möchten, wenn sich eine davon geändert hat. Es wird also weniger Code benötigt.@ Paul Cavacas, ich hatte das gleiche Problem und löste es, indem ich den
Input()
Dekorateur über den Getter stellte.Siehe diesen Plunker: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview
quelle
Die akzeptierte Antwort auf Angular 7.0.1 auf Stackblitz wurde hier aktualisiert: https://stackblitz.com/edit/angular-inputsetter?embed=1&file=src/app/app.component.ts
directives
sind nicht mehr in Component Decorator Optionen. Also habe ich dem App-Modul eine Unteranweisung gegeben.danke @ thierry-templier !
quelle