无法分配给'value',因为它是一个常量或只读属性。Angular 6

18
我正在尝试使用FormControl将一个值设置到Mat输入框中
<input name="contact" matInput [matAutocomplete]="contactAuto"  [formControl]="myControl" #contact (blur)="validateInput($event, contact.value)"  >

在我的Ts中

myControl = new FormControl();
this.myControl.value = 'contact';

上述代码运行良好,但我收到了一个错误。

Cannot assign to 'value' because it is a constant or a read-only property

我在这里漏掉了什么吗?

4个回答

17

谢谢..现在没问题了。 - Abx
@rpershkov 你能帮我一下吗?因为我正在尝试同样的事情,我已经尝试使用 patchValue 或 setValue,但它并没有改变 formGroup 的值。如果可以的话我们可以在聊天中讨论。 - TheCoderGuy

15

那不是设置值的正确方式。设置值的正确方式是使用setValue()patchValue()

this.myControl.setValue('contact');

@trichetriche 为什么要评论?你能否请取消踩赞? - Amit Chigadani
因为您向一个没有阅读文档的人提供了一行代码。如果您想让我取消踩,您需要编辑您的答案以链接文档并介绍 patchValue,然后我会给您一个赞。 - user4676340
我已经编辑过了,但是相对于表单控件而言,patchValuesetValue几乎是相同的。 - Amit Chigadani
同意,但你都提供了文档,所以我没问题! - user4676340
1
感谢 :) 简短而直接的回答。 - Prasad Patel
显示剩余2条评论

0
关于联系表单,手动使其无效的方法对我来说有效,代码如下:this.contactForm.setErrors({ valid: false });

0

您可以使用setValuepatchValue来实现此目的。二者的区别如下。

  • patchValue用于仅更新FormGroup或FormArray的子集。它只会更新匹配的对象,而忽略其他对象。
  • setValue用于更新FormControl、FormGroup或FormArray。当我们将其用于更新FormGroup或FormArray时,SetValue要求对象与FormGroup或FormArray的结构完全匹配。否则,它将导致错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接