2017-08-02 65 views
0

如何使角只读一个formControl如何使formControl只读

我知道我能做到这一点的HTML像

<input type="text" formControlName="xyz" readonly /> 

如何从JS代码做到这一点,在一个不是HTML即模型驱动方式

+2

您可以通过'this.form.controls.name.disable({onlySelf:true});'设置**禁用**,但是到目前为止我没有发现任何“只读”。 – Pengyy

+2

这里是一个相关的问题: https://github.com/angular/angular/issues/11447,似乎现在没有提供。 – Pengyy

回答

3

我们可以使用任何html属性并使用[]以角度绑定它。

所以,你可以使用属性readonly属性结合在控制

e.g

<input type="text" formControlName="xyz" [readonly]="anyBooleanPropertyFromComponent" />

+0

问题是如何以模型驱动的方式添加只读字段?请仔细阅读问题 –

+0

不好意思,这个问题还不清楚。 – Steve

+0

我想,*如何从JS代码而不是HTML *就足够了。 –

0

你可以(应该)禁用由SE组件的控制,由HTML非。

this.form.get('controlName').disable();

标签上使用readonly会产生安全问题的警告。

+0

这将使控制值不可用在this.myForm.value –

+0

是的。但是,您可以获得原始表单值,并通过这种方式可以获得该控件的值。使用myForm.getRawValue()。所以,你可以这样做:const formValue = Object.assign(myForm.getRawValue(),myForm.value); –

+0

使用禁用有其他含义,我认为readonly更适合输入。更多信息:https://stackoverflow.com/questions/7730695/whats-the-difference-between-disabled-disabled-and-readonly-readonly-for-ht/7730719#7730719 – Anthony

0

如果使用无表单,您可以指定它动态地像 下面的示例代码(电子邮件域)

this.registerForm = this.formBuilder.group({ 
     first_name: ['', Validators.required], 
     last_name: ['', Validators.required], 
     email: new FormControl({value: null, disabled: true}, Validators.required), 
     password: ['', Validators.compose([Validators.required, Validators.email])], 
     confirm_password: ['', Validators.required], 
}); 

如果你想获得的所有,包括你应该禁用的控件的值使用:

this.registerForm.getRawValue(); 

享受编码!