错误类型错误:无法分配给“12345”上的属性“验证器”:不是对象

Posted

技术标签:

【中文标题】错误类型错误:无法分配给“12345”上的属性“验证器”:不是对象【英文标题】:ERROR TypeError: can't assign to property "validator" on "12345": not an object 【发布时间】:2021-09-06 21:02:22 【问题描述】:

我想构建一个预先填写的表单,到目前为止,当我尝试显示表单页面时出现此错误。我尝试了各种给出的解决方案,但在这里似乎不起作用。

我的 hardwareRequest.ts

hardwareReviewForm: FormGroup;
  assetSerialNumber = new FormControl('');
  modelType = new FormControl('');



ngOnInit(): void 
    this.data = []
    this.service.loadRequestData(this.requestId).subscribe(
      (response: any) => 
        
        this.data = response
        console.log(this.data)
        this.assetSerialNumber = this.data.assetSerialNumber
        this.modelType = this.data.modelType

      ,
      (error) => 

       
      
    )
  

我的 html 文件

<form class="example-container" [formGroup]="hardwareReviewForm" (ngSubmit)="onFormSubmit()">
                
              <div class="ds-col-12" style="margin-bottom: 10px;">
                <div class="ds-col-6">
                  <mat-form-field appearance="outline">
                      <mat-label>Asset Serial Number: </mat-label>
                      <input formControlName="assetSerialNumber" readonly matInput type="text">
                  </mat-form-field>
              </div>

              <div class="ds-col-6">
                  <mat-form-field appearance="outline">
                      <mat-label>Part No./Model Type: </mat-label>                
                          <input formControlName="modelType" readonly matInput type="text">                     
                  </mat-form-field>
              </div>
              </div>

            </form>

【问题讨论】:

当我使用 [formControl] 时出现错误,但是当我使用 formControlName 时没有数据显示在输入中 请将错误和所有基于文本的信息显示为问题中的文本,而不是文本图片。 【参考方案1】:

您可以为您的字段创建一个“查看模型”,然后用它重置您的表单。

  export class testVm 
        assetSerialNumber : number;
        modelType : string;
    
  var model: testVm = this.data;
  this.hardwareReviewForm.reset(model)

或者,如果您想单独分配值,您应该这样做:

this.hardwareReviewForm.controls["assetSerialNumber"].reset(this.data.assetSerialNumber.toString()) 

【讨论】:

【参考方案2】:

首先,你必须在formGroup中定义表单控件;

hardwareReviewForm = new FormGroup(
  assetSerialNumber = new FormControl('');
  modelType = new FormControl('');
);

其次,您将值设置为如下所示的控件;

this.hardwareReviewForm.get('assetSerialNumber').setValue(this.data.assetSerialNumber);

【讨论】:

【参考方案3】:

我想通了.. .setValue 用于表单控件是一个愚蠢的错误。 如下设置我的值可以正常工作。

this.Number.setValue(this.data.Number) this.Type.setValue(this.data.Type)

【讨论】:

以上是关于错误类型错误:无法分配给“12345”上的属性“验证器”:不是对象的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“无法分配给属性:'setBarTintGradientColors' 是一种方法”的错误 [关闭]

Vue导入导致无法分配给对象错误的只读属性'exports'

参数类型“MaterialColor”不能分配给参数类型“Paint”

错误:无法将参数类型“MaterialAccentColor”分配给参数类型“MaterialColor”

错误 TS2416:“ApolloError”类型中的属性“originalError”不可分配给基类型“GraphQLError”中的相同属性

错误:无法将参数类型“FirebaseApp”分配给参数类型“Firebase”