Angular material Datepicker 抛出多个自定义值访问器匹配具有未指定名称属性的表单控件
Angular material Datepicker throws More than one custom value accessor matches form control with unspecified name attribute
我在 angular (7) 应用程序中使用了 material 日期选择器小部件。 html 如下所示。
<mat-form-field>
<input matInput [matDatepicker]="picker" placeholder="Expiry Date" [formControl]="expiryDateInputCtrl">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-hint *ngIf="isExpiryDateInvalid()" [ngStyle]="{'color': 'red'}" align="start">Invalid Expiry Date</mat-hint>
但是,这会在运行时抛出以下错误。
More than one custom value accessor matches form control with unspecified name attribute
at _throwError (forms.js:2144)
at forms.js:2202
at Array.forEach (<anonymous>)
at selectValueAccessor (forms.js:2191)
at new FormControlDirective (forms.js:5042)
at createClass (core.js:22160)
at createDirectiveInstance (core.js:22029)
at createViewNodes (core.js:23255)
at createEmbeddedView (core.js:23163)
at callWithDebugContext (core.js:24177)
我已使用表单控件"expiryDateInputCtrl" 读取文本字段中的输入值以检查用户是否输入了有效日期。据我所知,没有其他方法可以验证输入日期。
谁能说说原因
您可以使用 FormBuilder
和 formControlName
代替 [formControl]
设置你的 html :
<form [formGroup]="tripFormGroup">
<mat-form-field style="width: 100%">
<input matInput [matDatepicker]="picker" placeholder="Expiry Date"
formControlName="expiryDateInputCtrl">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-hint *ngIf="isExpiryDateInvalid()" [ngStyle]="{'color': 'red'}" align="start">Invalid Expiry Date</mat-hint>
</mat-form-field>
...
</form>
我发现了问题。我已经使用 TrimValueAccessorModule 从输入控件中删除了不需要的空格,这导致了这个问题。下面是工作代码
<mat-form-field style="width: 100%;">
<input matInput [matDatepicker]="picker" placeholder="Expiry Date" (dateChange)="onExpiryDateChange($event)" class="ng-trim-ignore" name="expiryDate" [formControl]="expiryDateInputCtrl">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-hint *ngIf="isExpiryDateInvalid()" [ngStyle]="{'color': 'red'}" align="start">Invalid Expiry Date</mat-hint>
这里添加 class="ng-trim-ignore" 解决了问题
我在 angular (7) 应用程序中使用了 material 日期选择器小部件。 html 如下所示。
<mat-form-field>
<input matInput [matDatepicker]="picker" placeholder="Expiry Date" [formControl]="expiryDateInputCtrl">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-hint *ngIf="isExpiryDateInvalid()" [ngStyle]="{'color': 'red'}" align="start">Invalid Expiry Date</mat-hint>
但是,这会在运行时抛出以下错误。
More than one custom value accessor matches form control with unspecified name attribute
at _throwError (forms.js:2144)
at forms.js:2202
at Array.forEach (<anonymous>)
at selectValueAccessor (forms.js:2191)
at new FormControlDirective (forms.js:5042)
at createClass (core.js:22160)
at createDirectiveInstance (core.js:22029)
at createViewNodes (core.js:23255)
at createEmbeddedView (core.js:23163)
at callWithDebugContext (core.js:24177)
我已使用表单控件"expiryDateInputCtrl" 读取文本字段中的输入值以检查用户是否输入了有效日期。据我所知,没有其他方法可以验证输入日期。 谁能说说原因
您可以使用 FormBuilder
和 formControlName
代替 [formControl]
设置你的 html :
<form [formGroup]="tripFormGroup">
<mat-form-field style="width: 100%">
<input matInput [matDatepicker]="picker" placeholder="Expiry Date"
formControlName="expiryDateInputCtrl">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-hint *ngIf="isExpiryDateInvalid()" [ngStyle]="{'color': 'red'}" align="start">Invalid Expiry Date</mat-hint>
</mat-form-field>
...
</form>
我发现了问题。我已经使用 TrimValueAccessorModule 从输入控件中删除了不需要的空格,这导致了这个问题。下面是工作代码
<mat-form-field style="width: 100%;">
<input matInput [matDatepicker]="picker" placeholder="Expiry Date" (dateChange)="onExpiryDateChange($event)" class="ng-trim-ignore" name="expiryDate" [formControl]="expiryDateInputCtrl">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-hint *ngIf="isExpiryDateInvalid()" [ngStyle]="{'color': 'red'}" align="start">Invalid Expiry Date</mat-hint>
这里添加 class="ng-trim-ignore" 解决了问题