Angular 在表单控件的错误对象上访问未知 属性 时不会抛出错误
Angular does not throw an error when accessing an unknown property on a form control's error object
定义一个 angular 响应式表单,其中包含一组不同的表单控件和为一些控件定义的验证器。在.ts文件中定义一个getter属性如下图。
get formControls(): {[key: string]: AbstractControl} {
return this.testForm.controls;
}
在html中,定义一个<mat-error>
和一个*ngIf
,如下所示
<mat-form-field appearance="fill">
<mat-label>First Name</mat-label>
<input matInput placeholder="Item Name" formControlName="firstName">
<mat-error *ngIf="formControls.firstName.errors?.maxLength">First Name cannot exceed 25 characters</mat-error>
</mat-form-field>
maxLength
属性 不正确,不存在于表单控件的错误对象中。正确的 属性 是 maxlength
。为什么在使用不正确的 属性 时 angular 不会抛出错误?
花了很长时间才确定 属性 名称是错误的,这就是 mat-error 中定义的消息没有显示在 html 中的原因。
这是 Angular 的错误还是我遗漏或实施不正确?
感谢大家花时间回答这个问题。
这就是 JavaScript 的工作原理。如果一个对象没有键,它会在尝试访问它时 return undefined
而不会像其他语言那样抛出异常。 undefined
是假的,所以 !!undefined
的计算结果是假的。
const obj = {a: 10};
console.log(obj.b) // undefined
在您的示例中,formControls.firstName.errors?.maxLength
未定义,因为错误没有名为 maxLength
的 属性。
定义一个 angular 响应式表单,其中包含一组不同的表单控件和为一些控件定义的验证器。在.ts文件中定义一个getter属性如下图。
get formControls(): {[key: string]: AbstractControl} {
return this.testForm.controls;
}
在html中,定义一个<mat-error>
和一个*ngIf
,如下所示
<mat-form-field appearance="fill">
<mat-label>First Name</mat-label>
<input matInput placeholder="Item Name" formControlName="firstName">
<mat-error *ngIf="formControls.firstName.errors?.maxLength">First Name cannot exceed 25 characters</mat-error>
</mat-form-field>
maxLength
属性 不正确,不存在于表单控件的错误对象中。正确的 属性 是 maxlength
。为什么在使用不正确的 属性 时 angular 不会抛出错误?
花了很长时间才确定 属性 名称是错误的,这就是 mat-error 中定义的消息没有显示在 html 中的原因。
这是 Angular 的错误还是我遗漏或实施不正确?
感谢大家花时间回答这个问题。
这就是 JavaScript 的工作原理。如果一个对象没有键,它会在尝试访问它时 return undefined
而不会像其他语言那样抛出异常。 undefined
是假的,所以 !!undefined
的计算结果是假的。
const obj = {a: 10};
console.log(obj.b) // undefined
在您的示例中,formControls.firstName.errors?.maxLength
未定义,因为错误没有名为 maxLength
的 属性。