2
私はControlValueAccessorを実装するカスタムフォームコンポーネントを持っています。このコンポーネントには、内部プロパティが設定されています。私はangular-を見つけることができませんcustomInputControl.markAsTouched()
角2カスタムフォームコンポーネント:markTouchedメソッドを提供
:
export class BmInputComponent implements ControlValueAccessor, Validator {
private onTouchedCallback:() => {};
private touched: boolean = false;
registerOnTouched(fn: any) {
this.onTouchedCallback = fn;
}
onBlur() {
this.touched = true;
this.onTouchedCallback();
}
}
は私がmarkAsTouchedがformControlに実行されたときに、コンポーネントのユーザーによって呼び出される可能性
markTouched() {
this.touched = true;
}
のようなメソッドを実装する必要がありますこれを行う方法。
@Edit: NgControlを注入しようとしました:
@Component({
selector: 'bm-input',
templateUrl: './bm-input.component.html',
encapsulation: ViewEncapsulation.None,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => BmInputComponent),
multi: true
}
]
})
export class BmInputComponent implements ControlValueAccessor, Validator {
private onTouchedCallback:() => {};
private touched: boolean = false;
constructor(@Self() @Optional() public _formControl: NgControl) {
this._viewDate = new Date();
if (this._formControl) {
this._formControl.valueAccessor = this;
this._formControl.statusChanges.subscribe(this.markTouched);
}
}
registerOnTouched(fn: any) {
this.onTouchedCallback = fn;
}
onBlur() {
this.touched = true;
this.onTouchedCallback();
}
markTouched() {
if(this._formControl.touched)
this.touched = true;
}
}
しかし、コンポーネントがformControlで呼び出されたとき、私はCannot instantiate cyclic dependency! NgControl
を取得しています。
例外はスローされませんが、注入されたコントロールは受け取りません – Zucca