Forms 角度2:禁用输入更改不工作

Forms 角度2:禁用输入更改不工作,forms,angular,Forms,Angular,在Angular的“final”2.0之前,我已经完成了以下工作: <input type="text" formControlName="name" [disabled]="!showName"> 这对于初始页面加载很好,但我不能再像这样切换状态: this._userGroupUsersForm = this._formBuilder.group({ 'users': [{'', disabled: this.showName}, Validators.comp

在Angular的“final”2.0之前,我已经完成了以下工作:

<input type="text" formControlName="name" [disabled]="!showName">
这对于初始页面加载很好,但我不能再像这样切换状态:

this._userGroupUsersForm = this._formBuilder.group({
        'users': [{'', disabled: this.showName}, Validators.compose([Validators.required, Validators.minLength(3), Validators.maxLength(50), Validators.pattern("^[a-zA-ZåäöÅÄÖ 0-9_-]+$")])]
    });
toggleName() : void { this.showName = !this.showName; }
我如何解决这个问题

注意:我的“旧”方法(通过设置[disabled])也不再有效

这应该行得通

toggleName() : void { 
  let ctrl = this.form.get('name')
  ctrl.enabled ? ctrl.disable() : ctrl.enable()
}

从RC6开始,您需要调用disable()函数。

同样的问题让我头痛不已。我的解决方案是使用插值而不是单向绑定来更新属性。在您的情况下,不要使用:

你可以做:

一旦我这样做了,我就能够动态地禁用/启用表单中的元素


我希望这有帮助

您可以尝试在输入中使用readonly属性

已禁用>>>只读


如果有人浏览了这篇文章,但被接受的答案(Günters)不起作用,就像我一开始不起作用一样。可能是您试图将其与自定义组件一起使用,但尚未从
ControlValueAccessor
界面实现可选方法
setDisabledState(isDisabled:boolean)

您必须使用:

[attr.disabled]
而不是:

[disabled]

我希望它能起作用。

真的!你真棒,先生。非常感谢。但是,它仍然会在“提交”按钮上抱怨,该按钮看起来像这样。有什么想法吗?抱怨什么。你能把准确的错误贴出来吗?很抱歉。这与以前的错误消息完全相同。我想它看起来像是所有的[残疾],并且显示出来了?我明白了。我想这是一个错误。没有按钮的控制。你介意报告吗?这不是虫子。它是包含[已禁用]的子组件。非常感谢。这不会在Anglar 4中编译:
解析器错误:在需要表达式的地方得到插值({{}})
听起来您可能正在执行[disabled]=“{{{interpolation}”。介意提供一个代码示例吗?谢谢使用自定义组件(用于不同类型的字段)传播更改(扩展ControlValueAccessor)。在前面的注释中尝试了插值,但在我的例子中,您的解决方案是有效的,看起来很实用,只是更新了表单控件的创建方式(带有disabled属性的显式构造函数),并添加了setdisabledStatus方法,该方法设置自定义组件的内部disabled属性。谢谢