首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何禁用表单控件但保留值

如何禁用表单控件但保留值
EN

Stack Overflow用户
提问于 2017-02-11 20:10:42
回答 5查看 40.8K关注 0票数 43

我有一个反应式。在编辑时,我想禁用一个控件。

以下是工作原理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   this.myForm.controls['analysis_horizon'].disable();

但是,密钥analysis_horizon不再在我的myForm.value散列中。

如何禁用具有反应式表单的字段,但保持表单值的哈希值?

我尝试过disabled=,但得到的结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true
      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for
      you. We recommend using this approach to avoid 'changed after checked' errors.

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

我在编辑时将数据从我的数据库加载到表单控件中,但我需要一个字段不允许更改。

EN

回答 5

Stack Overflow用户

发布于 2017-04-06 11:27:20

您可以使用getRawValue()而不是value属性。根据documentation的说法

FormGroup的聚合值,包括任何禁用的控件。

如果您希望包含所有值,而不考虑禁用状态,请使用此方法。否则,value属性是获取组的值的最佳方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.myForm.getRawValue()
票数 106
EN

Stack Overflow用户

发布于 2018-06-12 13:54:25

我的解决方案是使用attr.disabled

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<select formControlName="foo"
  [attr.disabled]="disabled == true ? true : null"> 
</select>

假设您的组件中有一个disabled属性。您必须返回null not false以启用输入。

票数 7
EN

Stack Overflow用户

发布于 2017-12-20 18:57:07

如果你不想使用getRawValue,这是另一个选择,它改变了从表单中获取值的正常方式。更多我更喜欢只读的原因:https://stackoverflow.com/a/7730719/1678151

我的解决方案还展示了如何填充表单控件。

component.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fillForm(data: any){
 if (data != null && data.firstName){
   this.form.patchValue({
     firstName: data.firstName
   })    
   this.firstNameIsReadOnly = true;
 } 

template.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input formControlName="firstName" [readonly]='firstNameIsReadOnly'>

styles.scss

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input[readonly] {
 color: rgba(0,0,0,.38);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42180696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文