У меня есть компонент Angular2 в этом компоненте, в настоящее время он имеет кучу полей, перед которыми применяется @Input (), чтобы разрешить привязку к этому свойству, т.е.
@Input() allowDay: boolean;
То, что я хотел бы сделать, это на самом деле связать со свойством get / set, чтобы я мог сделать некоторую другую логику в установщике, что-то вроде следующего
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
Как бы я сделал это в Angular2?
Основываясь на предложении Тьерри Темплиера, я изменил его на, но это выдает ошибку. Невозможно связать с «allowDay», так как это не известное нативное свойство:
//@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 (...) `.Ответы:
Вы можете установить @Input на сеттер напрямую, как описано ниже:
Смотрите этот план: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview .
источник
directives
атрибут компонента, где вы хотите его использовать ... Я обновил свой ответ.setter
будет НЕ быть вызваны мутациями в значения , которые передаются по ссылке (т.е. толкающие на массив, изменяющий объект и т.д.). Вам нужно будет заменить все передаваемое значение какInput
дляsetter
повторного запуска.Если вы в основном заинтересованы в реализации логики только для сеттера :
Импорт
SimpleChanges
не требуется, если не имеет значения, какое свойство ввода было изменено или если у вас есть только одно свойство ввода.Angular Doc: OnChanges
в противном случае:
источник
@Input
свойств и вы хотите вызывать подпрограмму, когда любое из них изменилось. Поэтому требуется меньше кода.@Paul Cavacas, у меня была та же проблема, и я решил, установив
Input()
декоратор над геттером.Смотрите этот плункер: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview
источник
Обновленный принятый ответ для angular 7.0.1 на stackblitz здесь: https://stackblitz.com/edit/angular-inputsetter?embed=1&file=src/app/app.component.ts
directives
больше нет в параметрах декоратора компонента. Таким образом, я предоставил подчиненную директиву для модуля приложения.спасибо @ Thierry-TEMPLIER !
источник