從自定義表單組件訪問FormControl我在我的角度應用,它實現ControlValueAccessor
界面自定義表單控制組件。獲取角
不過,我想訪問FormControl
情況下,用我的組件相關聯。我正在使用具有FormBuilder
的反應形式,並使用formControlName
屬性提供表單控件。
那麼,如何從我的自定義表單組件內部訪問FormControl
實例?
從自定義表單組件訪問FormControl我在我的角度應用,它實現ControlValueAccessor
界面自定義表單控制組件。獲取角
不過,我想訪問FormControl
情況下,用我的組件相關聯。我正在使用具有FormBuilder
的反應形式,並使用formControlName
屬性提供表單控件。
那麼,如何從我的自定義表單組件內部訪問FormControl
實例?
這種溶液從the discussion在角倉庫誕生。如果您對這個問題感興趣,請務必閱讀或者更好地參與。
我研究FormControlName
指令代碼和它激發了我想寫以下解決方案:
@Component({
selector: 'my-custom-form-component',
templateUrl: './custom-form-component.html',
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: CustomFormComponent,
multi: true
}]
})
export class CustomFormComponent implements ControlValueAccessor, OnInit {
@Input() formControlName: string;
private control: AbstractControl;
constructor (
@Optional() @Host() @SkipSelf()
private controlContainer: ControlContainer
) {
}
ngOnInit() {
if (this.controlContainer) {
if (this.formControlName) {
this.control = this.controlContainer.control.get(this.formControlName);
} else {
console.warn('Missing FormControlName directive from host element of the component');
}
} else {
console.warn('Can\'t find parent FormGroup directive');
}
}
}
我注入母公司FormGroup
到組件,然後讓從具體FormControl
它使用通過formControlName
綁定獲得的控件名稱。
然而,被告知,即這種解決方案對於其中FormControlName
指令主機元件上使用的情況下,使用專門定製。它在其他情況下不起作用。爲此,您需要添加一些額外的邏輯。如果您認爲這應該由Angular解決,請務必訪問the discussion。
正如@Ritesh已經寫在註釋中,你可以通過表單控件作爲輸入綁定:
<my-custom-form-component [control]="myForm.get('myField')" formControlName="myField">
</my-custom-form-component>
然後你就可以得到您的自定義窗體組件內部表單控件實例是這樣的:
@Input() control: FormControl;
從你有'this.control'在哪裏? – DAG
@DAG我在回答說:'我注入父FormGroup到該組件,然後使用通過formControlName獲得的控制名從它得到特定FormControl binding.' –
@SlavaFominII:代替注射母體形式組,然後使用formControllerName輸入綁定訪問控件,我們不能僅僅通過表單控件作爲輸入綁定?我有一個類似的要求,我想從自定義表單組件訪問表單控件,並將該表單控件作爲輸入綁定到自定義表單組件。 – Ritesh