2016-11-08 72 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]而不是[禁用],在我的情况下,它的工作原理确定