Другой шанс - использовать следующий подход
Пользовательский код управления
@Component({
selector: 'cvl-advertising-type',
templateUrl: './advertising-type.component.html',
styleUrls: ['./advertising-type.component.scss'],
})
export class AdvertisingTypeComponent implements OnInit, ControlValueAccessor {
advertisingTypes: ReadonlyArray<LookupModel>;
onChange = (value: number) => {
};
onTouched = () => {
};
constructor(private lookupService: LookupService,
@Self() public controlDir: NgControl) {
controlDir.valueAccessor = this;
}
ngOnInit(): void {
this.advertisingTypes = this.lookupService.advertisingTypes;
}
registerOnChange(fn: (value: number) => void): void {
this.controlDir.control.valueChanges.subscribe(fn);
this.onChange = fn;
}
writeValue(value: number): void {
this.controlDir.control.setValue(value);
this.onChange(value);
}
registerOnTouched(fn: any): void {
this.onTouched = fn;
}
setDisabledState(isDisabled: boolean): void {
if (isDisabled) {
this.controlDir.control.disable();
} else {
this.controlDir.control.enable();
}
}
}
и родительский html бланк
<cvl-advertising-type [formControl]="form.controls.advertisingType"></cvl-advertising-type>
Я нашел это решение после просмотра этого видео
Последняя, но не менее важная проблема заключается в том, что я не понимаю, как проверить его с помощью поверхностного теста, потому что у меня следующая ошибка
Error: NodeInjector: NOT_FOUND [NgControl]