Mam składnik Angular2 w tym komponencie, który obecnie ma kilka pól, które mają zastosowane przed nimi @Input (), aby umożliwić powiązanie z tą właściwością, tj.
@Input() allowDay: boolean;
To, co chciałbym zrobić, to w rzeczywistości powiązać się z właściwością za pomocą get / set, abym mógł wykonać inną logikę w seterze, coś takiego jak poniżej
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
jak bym to zrobił w Angular2?
Opierając się na sugestii Thierry'ego Templiera, zmieniłem to na, ale powoduje to błąd Nie można powiązać z „allowDay”, ponieważ nie jest to znana własność natywna:
//@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 (...) `.Odpowiedzi:
Możesz ustawić @Input bezpośrednio na seterze, jak opisano poniżej:
Zobacz ten plunkr: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview .
źródło
directives
atrybutu komponentu, w którym chcesz jej użyć ... Zaktualizowałem moją odpowiedź.setter
będzie nie być wywołane przez mutacje do wartości, które są przekazywane przez referencję (tzn naciska na tablicy, mutującymi obiekt itp.) Trzeba by wymienić całą wartość jest przekazywana jakoInput
dlasetter
na spuście ponownie.Jeśli jesteś zainteresowany głównie implementacją logiki tylko do ustawiacza :
Importowanie
SimpleChanges
nie jest potrzebne, jeśli nie ma znaczenia, która właściwość wejściowa została zmieniona lub jeśli masz tylko jedną właściwość wejściową.Angular Doc: OnChanges
Inaczej:
źródło
@Input
właściwości i chcesz wywołać procedurę, gdy któraś z nich ulegnie zmianie. Tak więc potrzeba mniej kodu.@Paul Cavacas, miałem ten sam problem i rozwiązałem go ustawiając
Input()
dekorator nad getter.Zobacz ten plunker: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview
źródło
Zaktualizowana zaakceptowana odpowiedź do angular 7.0.1 na stackblitz tutaj: https://stackblitz.com/edit/angular-inputsetter?embed=1&file=src/app/app.component.ts
directives
nie ma już w opcjach dekoratora komponentów. Więc podałem pod dyrektywę do modułu aplikacji.dziękuję @ thierry-templier !
źródło