2017-08-16 38 views
2

我有一個表單使用一個叫ng-select的指令來增強選擇輸入。在我的設置中,我允許用戶進行一些選擇,然後單擊「過濾器」按鈕。Angular2 - 從元素中刪除禁用的屬性

單擊此按鈕後,我禁用輸入。

HTML:

<div class="form-group"> 
    <div class="input-group"> 
     <ng-select #cc formControlName="costCenter" (removed)="updateChoices(cc.active, 'costCenter')" [allowClear]="true" [multiple]="true" 
     [items]="getCostCenters()" placeholder="Select one or more Cost Centers"> 
     </ng-select> 
     <span class="input-group-btn"> 
     <button #b_cc class="btn btn-sm btn-default" type="button" title="Update Filter" (click)="updateChoices(cc.active, 'costCenter', cc, b_cc)"><i class="fa fa-filter"></i></button> 
     </span> 
    </div> 
</div> 

組件功能:

/** 
    * Upon selecting a data point, reload available options 
    * based on data selected. 
    * 
    * @param formValues 
    * @param field 
    */ 
    updateChoices(formValues, field, selectInput, button): void { 

     // Show the loading indicator 
     this.showLoader = true; 

     // Set and fetch data 
     this.selectedFields[field] = formValues; 
     this.getFields(this.selectedFields, false); 

     // Disable our search field and filter button 
     button.disabled = true; 
     selectInput.disabled = true; 

    } 

您可以在我禁止外地和他們點擊的按鈕組件看到。

我現在試圖實現一個reset方法,我可以將所有字段重置爲空,包括將它們切換到enabled

我試圖通過使用this.importForm.controls['costCenter'].enable();通過我的反應形式,但沒有做任何事情。

我檢查了復位後的窗體,它被設置回pristine而不是touched,所以我知道我的窗體重置正在工作,但重新啓用不是。

我自己也嘗試做這在我的形式復位方法,例如:

this.importForm.reset({ 
    costCenter: {value:[], disabled:false}, 
}); 

缺少什麼我在這裏?

+0

你爲什麼禁用DOM本身,而不是FormControl的?而不是'selectInput.disabled = true;'嘗試'this.importForm.controls ['costCenter']。disable()' –

+0

@HarryNinh我確實試過,當我第一次設置它並且它不會禁用。當我在禁用運行後檢查表單時,實際上已將其設置爲「_status = DISABLED」,但UI上的輸入未反映此情況。我開始認爲這個指令並沒有正確實現反應形式,或者根本就沒有實現這些反應形式,這就是爲什麼我必須使用DOM方法。 – SBB

+0

是的,我認爲罪魁禍首是'ng-select'指令。如果你不能使用FormControl **禁用選擇**,你不能指望啓用選擇**使用FormControl **將工作。 –

回答

1

顯然這個解決方案是here

這爲我工作

<input [attr.disabled]="IsTextBoxDisabled?'true':null">