无法读取ngOnInit()Angular7上未定义的属性“ id”

时间:2019-04-10 05:43:58

标签: angular google-cloud-firestore angular7

我是初学者。问题实际上出在EmployeeComponent.ts中,如果我在this.resetForm();中调用ngOnInit(),则对话框的控件会在页面加载期间显示...但是在编辑过程中,它来自employeelist service.formData集一直回零,我不希望这种情况发生。我希望这两种功能都能实现。

如果我在remove this.resetForm();ngOnInit(),则会出现以下错误。 (但编辑效果很好)注意:service.formData包含字段ID,描述和有效字段

  

控制台日志错误:EmployeeComponent_Host.ngfactory.js? [sm]:1错误   TypeError:无法读取未定义的属性“ id”       在EmployeeComponent.push。

EmployeeComponent.ts

ngOnInit() {
  this.resetForm();
}


resetForm(form ? : NgForm) {

  if (form != null)
    form.resetForm();

  this.service.formData = {
    id: null,
    description: '',
    active: true,
  }
  console.log(this.service.formData.id);
}  

EmployeeListComponent.ts

onEdit(emp: Employee) {
  this.service.formData = Object.assign({}, emp);
  const dialogConfig = new MatDialogConfig();
  dialogConfig.disableClose = true;
  dialogConfig.autoFocus = true;
  dialogConfig.width = "50%";
  this.dialog.open(EmployeeComponent, dialogConfig);
}

Employee.component.html

<form #form="ngForm" autocomplete="off" >
  <mat-grid-list cols="2">
          <input type="hidden" name="id" #id="ngModel" [(ngModel)]="service.formData.id">       
        <mat-form-field>   
          <input name="description" matInput #description="ngModel" [(ngModel)]="service.formData.description" placeholder="Employee" required>  
   </mat-form-field>
 <mat-checkbox  matInput #active="ngModel" [(ngModel)]="service.formData.active" name="active">Active</mat-checkbox>         
  </mat-grid-list>
      <button mat-raised-button color="primary" type="submit" [disabled]="form.invalid" (click)="onSubmit(form)">Submit</button>
      <button mat-raised-button color="warn" style="margin-left: 6px;" (click)="onClear(form)">Clear</button>

</form>

1 个答案:

答案 0 :(得分:0)

这里EmployeeComponent是要打开的mat对话框组件,因此您需要在EmployeeComponent的构造函数中使用以下内容向对话框提供数据

 constructor(
@Inject(MAT_DIALOG_DATA) data)){}

打开用于编辑目的的对话框时,需要设置数据

  onEdit(emp: Employee) {
      dialogConfig = new MatDialogConfig();
      dialogConfig.disableClose = true;
      dialogConfig.autoFocus = true;
      dialogConfig.width = "50%";
      // Provide your data here      
      dialogConfig.data = emp;

      this.dialog.open(EmployeeComponent, dialogConfig);
    }

现在您可以通过名称“ data”属性在EmployeeComponent上使用此数据

,仅在ngOninit中使用重置形式

ngOnInit() {
if (form != null)
    form.resetForm();
}

您需要处理的其他事情,例如在完成保存后清除此数据