2016-11-08 75 views
20

我正在嘗試使用formControl中的disabled屬性。當我把它的模板,它的工作原理:無效表單 - 禁用屬性

<md-input formControlName="id" placeholder="ID" [disabled]="true"></md-input> 

但瀏覽器提醒我:

它看起來像你使用一個反應形式 指令禁用屬性。如果在組件類中設置此控件時將禁用屬性設置爲true ,那麼將禁用屬性實際上設置爲DOM中的 您。我們建議使用這種方法來避免「檢查後更改」錯誤。

Example: 
    form = new FormGroup({ 
    first: new FormControl({value: 'Nancy', disabled: true}, Validators.required), 
    last: new FormControl('Drew', Validators.required) 
    }); 

所以我把它放在FormControl,並從模板中刪除:

constructor(private itemsService: ItemsService) { 
    this._items = []; 
    this.myForm = new FormGroup({ 
     id: new FormControl({value: '', disabled: true}, Validators.required), 
     title: new FormControl(), 
     description: new FormControl() 
    }); 
    this.id = this.myForm.controls['id']; 
    this.title = this.myForm.controls['title']; 
    this.description = this.myForm.controls['description']; 
    this.id.patchValue(this._items.length); 
} 

但它不工作(它不禁止輸入)。問題是什麼?

+1

這似乎只是正常工作,具有角2的當前版本: http://plnkr.co/edit/CQQtkYC9D5EoH0sAlNCV ?p = preview – silentsod

+0

我正在使用最新的角度cli項目進行測試 – FacundoGFlores

+2

您正在使用@ angular/material,因此,根據他們的github問題:https://github.com/angular/material2/issues/1171 它是尚未支持,並且它們處於alpha模式,因此您不能指望它功能完整。 – silentsod

回答

10
我一直在使用 [attr.disabled]

GitHub上的問題是因爲我仍然喜歡這個模板驅動比編程啓用()/禁用(),因爲它是優越的國際海事組織。

變化

<md-input formControlName="id" placeholder="ID" [disabled]="true"></md-input>

<md-input formControlName="id" placeholder="ID" [attr.disabled]="true"></md-input>

如果你是新的重大變化MD-輸入mat-input

+0

它的工作原理,謝謝!但我不明白爲什麼我應該使用「attr.disabled」(不僅是「禁用」)? –

+0

這也適用於Telerik Kendo的Angular組件。其中一些人擁有'[禁用]'財產,當使用它時,我得到了相同的編譯警告。我已將'[disabled]'更改爲'[attr.disabled]',並將其傳播到組件'.disabled'屬性中。 –

+1

只需要注意,[attr.disabled]你不能以兩種方式使用綁定。它只能使用一次。使用'[disabled]'並且控制檯中的警告正在工作。我正在使用Angular 4.1.3 –

0

將名稱屬性添加到您的md輸入。如果它不能解決問題,請發佈您的模板

0

使用[attr.disabled]而不是[禁用],在我的情況下,它的工作原理確定