javascript - 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();
}
}
解决方案
我相信问题在于您已将其声明DialogData
为接口而不是类。并且您声明了一个类型的变量DialogData
,并且您试图在不实例化的情况下访问dialogData.errors
,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; //<-- 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();
推荐阅读
- java - 无法在文件的第一行解析 Int
- ignite - 使用 RDBMS 的持久性存储的概念
- python - 是否可以使用 NumPy 而不是内置列表来最大化我的代码效率?
- javascript - 如何使用 WKWebView 为 xls 文件应用暗模式?
- android - Android:达到特定位数后,如何将十进制格式更改为科学格式?
- erlang - 有没有一种方法可以添加案例,如果找到某些东西,它只会将一些数据添加到 Record 中
- sql - 仅从查询中的时间/日期获取日期?
- javascript - 模态窗口未关闭问题
- encoding - Symfony Security 编码器的“自动”算法可以改变编码方法吗?
- excel - 将 XML 发送到 URL