Пытаюсь разобраться с control value accessor и набросал простейший пример. В каждой функции поставил консоль лог чтобы посмотреть в какой именно момент она срабатывает.
Проблема в том, что ни одна из этих функций не срабатывает. Хотя при этом ошибок в консоли нет. И вообще я реализовал интерфейс control value accessor поэтому должно хоть что-то происходить
Помогите пожалуйста оживать пример. Демо здесь
js:
name: FormGroup;
constructor(fb: FormBuilder) {
this.name = fb.group({
firstName:['1'],
lastName: ['22']
});
}
writeValue(value: any) {
console.log('writeValue', value);
if(value) {
this.name.setValue(value);
}
}
registerOnChange(fn: (value: any) => void) {
console.log('registerOnChange');
this.name.valueChanges.subscribe(fn);
}
registerOnTouched() {
console.log('registerOnTouched');
}
html:
<div [formGroup]="name">
<input formControlName="firstName">
<input formControlName="lastName">
</div>
control value accessor используется для реализации ngModel в кастомном компоненте. Потому ваша в данный момент и не работает. Вот пример реализации control value accessor:
@Component({
selector: 'app-custom-component',
templateUrl: './app-custom.component.html',
styleUrls: ['./app-custom.component.scss'],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CustomComponent),
multi: true
}
]
})
export class CustomComponent implements ControlValueAccessor {
private _begin: Date;
set begin(value) {
this._begin = value;
this.onChange(this._begin);
}
get begin() {
return this._begin;
}
onChange = (_: any) => { };
OnTouched = (_: any) => { };
constructor() { }
writeValue(value: Date): void {
this.begin = value;
}
registerOnChange(fn: any): void {
this.onChange= fn;
}
registerOnTouched(fn: any): void {
this.onTouched= fn;
}
setDisabledState?(isDisabled: boolean): void {
/*реализация для свойства disabled*/
}
}
В разметке компоненты:
<input type="date" [(ngModel)]="begin" name="begin">
Непосредственное использование:
<app-custom-component [(ngModel)]="currentDate"></app-custom-component>
В компоненте объявить свойство currentDate
Как то так.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости