【发布时间】:2019-05-17 19:02:25
【问题描述】:
我有一个 Angular 7 自定义组件来包装一个 ng-bootstrap NgbDatePickerInput。
form = this.fb.group({
date2: [null, Validators.required]
});
<date-editor formControlName="date2"></date-editor>
如何将 formControl 的 Validator.required 传播到该内部组件? 这样空白文本无效并且 <input> 应用了 nb-invalid 样式,就像如果日期选择器不在自定义控件中。
Stackblitz reproduction of my problem.
我的自定义组件是:
import { Component } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
@Component({
selector: 'date-editor',
template: `
<input class="form-control" placeholder="mm/dd/yyyy" [(ngModel)]="value" ngbDatepicker #dp="ngbDatepicker" container="body" (focus)="dp.open()" (dateSelect)="update($event)">
`,
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: DateEditorComponent,
multi: true
}]
})
export class DateEditorComponent implements ControlValueAccessor {
value;
propagateChange = (_: any) => { };
writeValue(obj: any): void {
this.value = obj;
}
registerOnChange(fn: any): void {
this.propagateChange = fn;
}
registerOnTouched(fn: any): void { }
update($event) {
this.propagateChange($event);
}
}
我见过this other SO post 并尝试使用它,但没有成功。清除input 文本不会触发ng-invalid 状态。
【问题讨论】:
标签: angular ng-bootstrap