2017-05-15 12 views
7

我有,我想根據條件動態地禁用選擇控制:Angular2活性形式 - 禁用表單控件動態地從條件

this.activityForm = this.formBuilder.group({ 
    docType: [{ value: '2', disabled: this.activeCategory != 'document' }, Validators.required] 
}); 

然而,DOCTYPE不會成爲被啓用,即使在某些時候這.activeCategory變成'文檔'。

我該如何解決這個問題?

回答

11

因爲我不知道你是如何操縱activeCategory(也許這也是一個FormControl?),我會建議使用以下方法:

您可以如下使用(change)this.activeCategory發生了變化進行檢測, :

1 - 如果你正在使用ngModel

<input type="text" [(ngModel)]="activeCategory" (change)="checkValue($event)"> 

2 - 如果它是一個FormControl

<input type="text" formControlName="activeCategory" (change)="checkValue($event)"> 

所以,在組件,你可以操縱使用disable/enable方法docType控制

checkValue(event: Event) { 
    const ctrl = this.activityForm.get('docType'); 

    if (event.value === 'document') { 
    ctrl.enable(); 
    } else { 
    ctrl.disable(); 
    } 
} 
4

您必須以不同於其他HTML元素的方式處理選定元素。當this.activeCategory更改時,您將必須執行重置。

事情是這樣的:

this.activityForm.controls['docType'].reset({ value: '2', disabled: false });

當然,你可能會想使用的電流值,而不是硬編碼'2'

同樣的事情要禁用它,如果需要出現(它可能會)。上納克形式控制reset

this.activityForm.controls['docType'].reset({ value: '2', disabled: true });

的更多信息。

+0

是否有這樣做的更好的方式?說'setValue'或'patchValue'? – Kody

+0

@Kody對於啓用/禁用選擇,不是我所知道的。 'setValue'和'patchValue'用於改變窗體控件的值,而不是可視狀態。 –