角度-使用ngx-mask MatDatepicker和反应形式的输入

时间:2020-03-23 17:21:06

标签: angular angular-material angular-reactive-forms mat-datepicker ngx-mask

我想在表单上添加反应式表单控件,并触发错误:

多个自定义值访问器将表单控件与未指定名称属性匹配

一切都可以分开工作,反应式表单验证,mask或matDatepicker,任何一对组合也都可以工作,但是三个一起提示错误。

这是我的代码:

在component.ts

formGroup = new FormGroup({
    date: new FormControl()
  });

在component.html

    <mat-form-field>
      <input type="text" matInput [matDatepicker]="date_picker" mask="d0/M0/0000" formControlName="date">
      <mat-datepicker-toggle matSuffix [for]="date_picker"></mat-datepicker-toggle>
      <mat-datepicker #date_picker></mat-datepicker>
    </mat-form-field>

我正在使用:

"@angular/cli": "8.3.19"
"ngx-mask": "8.1.7"
"@angular/material": "8.2.3"

2 个答案:

答案 0 :(得分:0)

我正在努力解决同一问题。 根据此线程,没有解决方案,只有一种解决方法: Error: More than one custom value accessor matches form control with unspecified name attribute

我使用了提到的解决方法,将vanilla-text-mask作为临时(我希望)解决方案,但是上述线程没有任何活动,因此... 这是解决方法的链接: Use more than one CustomValueAcessor in one Input field

希望有帮助!

答案 1 :(得分:0)

我的解决方案:

1-在日期输入下方创建一个辅助掩码输入,使用NgModel将其值绑定到日期输入。 (不要在屏蔽的输入上使用matInput指令!)

 <input #dateInput matInput formControlName="control"  [matDatepicker]="picker" etc.../>
 <input #maskedInput [(ngModel)]="dateInput.value" mask="00/00/0000" [dropSpecialCharacters]="false" etc.../>

2-使用CSS隐藏日期输入:

input:first-child {
  height: 0;
  width: 0;
  overflow: hidden;
}

3-将焦点事件从日期输入中继到掩码输入

<input #dateInput (focus)="maskedInput.focus()" etc...>
<input #maskedInput etc...>

4-将输入事件从屏蔽输入中继到日期输入

<input #dateInput etc.../>
<input #maskedInput (input)="dispatch(dateInput)" etc.../>

5-在组件ts中创建一个“调度”功能

dispatch(input: HTMLInputElement){
    input.dispatchEvent(new Event('input'));
}

工作演示: https://stackblitz.com/edit/angular-ivy-gyy1i4?file=src%2Fapp%2Fapp.component.ts