angular - 如何在 Angular 中正确使用 <input type ="date">?

标签 angular

我有一个输入控件,如下:

<input type="date" (change)="getValues($event)" [ngModel]="customer.dob| date:'yyyy-MM-dd'" (ngModelChange)="customer.dob = $event">

当我使用键盘输入日期时,它会重置为dd/MM/yyyy。鼠标工作正常。有什么建议吗?

最佳答案

Angular 2: How to use date input controls with Angular Forms中有一篇关于它的整篇文章.

解决方案是为日期输入控件实现一个新的值访问器:

// date-value-accessor.ts

import { Directive, ElementRef, HostListener, Renderer, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';

export const DATE_VALUE_ACCESSOR: any = {
  provide: NG_VALUE_ACCESSOR,
  useExisting: forwardRef(() => DateValueAccessor),
  multi: true
};

/**
* The accessor for writing a value and listening to changes on a date input element
*
*  ### Example
*  `<input name="myBirthday" type="date" />`
*/
@Directive({
  selector: '[useValueAsDate]',
  providers: [DATE_VALUE_ACCESSOR]
})
export class DateValueAccessor implements ControlValueAccessor {

  @HostListener('input', ['$event.target.valueAsDate']) onChange = (_: any) => { };
  @HostListener('blur', []) onTouched = () => { };

  constructor(private _renderer: Renderer, private _elementRef: ElementRef) { }

  writeValue(value: Date): void {
    this._renderer.setElementProperty(this._elementRef.nativeElement, 'valueAsDate', value);
  }

  registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
  registerOnTouched(fn: () => void): void { this.onTouched = fn; }

  setDisabledState(isDisabled: boolean): void {
    this._renderer.setElementProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  }
}

关于angular - 如何在 Angular 中正确使用 &lt;input type ="date">?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52200032/

相关文章:

angular - 如何在angular4中使用TemplateRef的createEmbeddedView方法?

angular - 单击 Angular 7 中的另一个组件时从 mat-table 传递数据行

angular - 如何从 ControlValueAccessor 获取 FormControl 实例

angular - 如何将组件导入 Angular 2 中的另一个根组件

Angular - 如何为可选输入属性设置默认值

Angular 5 : Is there way hide API call? 还是将其设为私有(private)?

angular - 如何在 Ionic 2 中设置单选按钮警报的值

angular - Angular 2 如何在没有任何显式代码的情况下知道父实例?

angular - 使用模拟器时,Firestore 规则中的 request.auth 为 null

typescript - 如何使用 Http 类在 Angular 2 中获取 json 文件?