为什么form:FormGroup显示';控件';在Angular11组件中未定义?

为什么form:FormGroup显示';控件';在Angular11组件中未定义?,angular,typescript,angular11,Angular,Typescript,Angular11,一般来说,我对Angular 11和TypeScript都是新手。。我试图访问显式定义的“FormGroup”变量中的“controls”属性。它一直告诉我该属性未定义 send(form: FormGroup): void{ let jsonModel = { materialNum: form.controls['materialNum'].value, }; let jsonModelRaw: string = JSON.stringify(jsonM

一般来说,我对Angular 11和TypeScript都是新手。。我试图访问显式定义的“FormGroup”变量中的“controls”属性。它一直告诉我该属性未定义

send(form: FormGroup): void{
    let jsonModel = {
      materialNum: form.controls['materialNum'].value,
    };

    let jsonModelRaw: string = JSON.stringify(jsonModel);
    //...
}

本人声明如下:

import { FormBuilder, FormControl, FormGroup, NgForm, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';
组件的HTML:

  <mat-vertical-stepper [linear]="isLinear" #stepper>
    <mat-step [completed]="stepOneDone" [stepControl]="newMaterialFormGroup">
      <form [formGroup]="newMaterialFormGroup"
            name="newMaterialForm"
            #newMaterialForm="ngForm"
            (ngSubmit)="send(newMaterialFormGroup.value)">
        <ng-template matStepLabel>Fill out new material form</ng-template>
        <mat-form-field>
          <mat-label>Material #</mat-label>
          <input matInput placeholder="Material ID" formControlName="MaterialNum" required>
        </mat-form-field>

填写新的材料表
材料#

谢谢@miqh让我意识到这个错误。在HTML中,我将FormGroup的值作为参数传递,而不是对象本身。所以,从技术上讲,我是在传递原始JSON

因此,这篇文章
(ngSubmit)=“send(newMaterialFormGroup.value)”>
应该更改为
(ngSubmit)=“发送(newMaterialFormGroup)”>

这样做会传递对象,从而允许我成功访问
控件


但问题仍然是。。。如果我明确说明参数类型为
FormGroup
,并且我启用了强类型,为什么TS没有检测到这一点。

请包括TS代码相关的HTML模板,这可能是一个绑定问题。@miqh刚刚添加了一个重要部分,我正在使用stepper,我想我已经找到了它不起作用的原因。我发送的值不是实际的formGroup对象!