如何在Angular中正确使用<input type =“ date”>?

拉胡尔·萨尔维(Rahul Salvi)

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

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

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

巴尔J

在《Angular 2:如何将日期输入控件与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);
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在VueJS中使用<input type =“ date”>,然后使用Date.prototype.getFullYear()?

如何在Chrome中更改<input type = date>的外观

如何使用jQuery从HTML <input type =“ date”>中提取值

如何在HTML(5)中正确地在<input type =“ number”>的末尾添加单位?

当input [type = date]接收到值时,如何显示元素?

如何检查 input type="date" 是否有值

如何将(格式正确的)字符串变量分配给<input type =“ date” />值

<input type =“ date> onchange触发过多

ReactJS <input type =“ date”>格式日期

如何为 <input type="date" id="availableDate" value =" "/> 设置当前日期

当input [type =“ date”]成为焦点时如何显示日历弹出窗口

django:如何将数据库中的日期值放入“input type='date'”?

无法使用Selenium在Firefox的<input type =“ date”>字段中输入日期

使用Date对象和<input type =“ time”>进行数学运算

将 <input type="date"> 更改为波斯语日期

React input [type = date]组件无法正常工作

将C#Datetime转换为input [type = date]

<input type ='date'>在选择日期时使Dartium崩溃

HTML 5 Input type ='date'禁用键盘输入

<input type =“ date”>-jQuery捕获事件清除日期

Chrome以外的浏览器的input [type ='date']的CSS样式

僅禁用 <input type = "date"> 的日曆模式

如何在 input type="number" angular 中获取文本

如何使所有浏览器都支持<input type =“ date”>?还有其他选择吗?

如何在TYPE OBJECT的VARRAY中正确插入?

如何使用 foreach input[type=submit]?

为什么Firefox中的<input type ='date'/>`和`<input type ='time'/>`会发生onchange问题?还是我错过了什么?

如何自定义<input type =“ file”>?

如何使照片用作<input type =“ file”>?