首页 > 解决方案 > Angular8 对象未定义?

问题描述

我有这段代码,我试图打开一个包含所有表单错误的对话框。我遇到的问题是对象“dialogData”错误说:“ERROR TypeError:dialogData is undefined”。我不确定为什么。我试图将其声明为空数组,但效果不佳。

像这样:“让 dialogData: DialogData;” 像这样:“让 dialogData:DialogData = <DialogData>{};”

  // get all error messages
  getFormValidationErrors() {
    Object.keys(this.quoteForm.controls).forEach(key => {
      const controlErrors: ValidationErrors = this.quoteForm.get(key).errors;
      let dialogData: DialogData;

      if (controlErrors != null) {
        Object.keys(controlErrors).forEach(keyError => {
          console.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);
          let errorData: ErrorData = { 
            key: key,
            keyError: keyError,
            controlErrors: controlErrors[keyError]
          }
          dialogData.errors.push(errorData);
        });
        this.openDialog(dialogData);
      }
    });
  }
import {Component, Inject} from '@angular/core';
import { ValidationErrors } from '@angular/forms';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';

export interface DialogData {
  errors: ErrorData[];
}

export interface ErrorData {
    key: string;
    keyError: string;
    controlErrors: ValidationErrors;
  }

@Component({
  selector: 'dialog-validation-errors',
  templateUrl: 'dialog-validation-errors.html',
})
export class DialogValidationErrors {

  constructor(
    public dialogRef: MatDialogRef<DialogValidationErrors>,
    @Inject(MAT_DIALOG_DATA) public data: DialogData) {}

  onNoClick(): void {
    this.dialogRef.close();
  }

}

标签: javascriptangulartypescript

解决方案


我相信问题在于您已将其声明DialogData为接口而不是类。并且您声明了一个类型的变量DialogData,并且您试图在不实例化的情况下访问dialogData.errorsdialogData因此它抱怨dialogData 未定义

// get all error messages
getFormValidationErrors() {
    Object.keys(this.quoteForm.controls).forEach(key => {
        const controlErrors: ValidationErrors =     this.quoteForm.get(key).errors;
        let dialogData: DialogData; //<-- DialogData is not initialized

        if (controlErrors != null) {
            Object.keys(controlErrors).forEach(keyError => {
            console.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);
                let errorData: ErrorData = { 
                    key: key,
                    keyError: keyError,
                    controlErrors: controlErrors[keyError]
                }
                dialogData.errors.push(errorData); //<-- trying to access dialogData.errors
            });
            this.openDialog(dialogData);
        }
    });
}

一个简单的解决方法是将该行替换为

let dialogData: DialogData = {errors: []}; 

或更改DialogData为类并实例化对象

let dialogData: DialogData = new DialogData(); 

推荐阅读