Angular 角度材质材质材质日期选择器(更改)事件和格式
我使用的是angular material datepicker指令,没有什么问题 1。当我打开日期选择器对话框并选择任何日期时,日期会显示在输入文本框中,但我想在输入文本框中发生任何更改时调用函数 现在,若我在输入文本框中手动输入任何值,我将使用(input)指令触发函数,它工作正常,如代码所示。我想在使用日期选择器对话框更改日期时触发相同的函数 2.我还想将日期格式从mm/dd/yyyyy更改为dd/mm/yyyyy。此处,本指令中默认设置了mm/dd/yyyyAngular 角度材质材质材质日期选择器(更改)事件和格式,angular,angular-material,angular5,Angular,Angular Material,Angular5,我使用的是angular material datepicker指令,没有什么问题 1。当我打开日期选择器对话框并选择任何日期时,日期会显示在输入文本框中,但我想在输入文本框中发生任何更改时调用函数 现在,若我在输入文本框中手动输入任何值,我将使用(input)指令触发函数,它工作正常,如代码所示。我想在使用日期选择器对话框更改日期时触发相同的函数 2.我还想将日期格式从mm/dd/yyyyy更改为dd/mm/yyyyy。此处,本指令中默认设置了mm/dd/yyyy <input matI
<input matInput [matDatepicker]="organizationValue" formControlName="organizationValue" (input)="orgValueChange(i)">
<mat-datepicker-toggle matSuffix [for]="organizationValue"></mat-datepicker-toggle>
<mat-datepicker #organizationValue></mat-datepicker>
来自
您可以根据需要使用以下事件之一
@Output()
dateChange(): EventEmitter<MatDatepickerInputEvent<D>>
@Output()
dateChange():EventEmitter
在对此服务器激发更改事件时发出
@Output()
dateInput(): EventEmitter<MatDatepickerInputEvent<D>>
@Output()
dateInput():EventEmitter
在该服务器上激发输入事件时发出
@Output()
dateInput(): EventEmitter<MatDatepickerInputEvent<D>>
例如:
<input matInput #ref [matDatepicker]="organizationValue" formControlName="organizationValue" (dateChange)="orgValueChange(ref.value)">
或 <input matInput #ref [matDatepicker]="organizationValue" formControlName="organizationValue" (dateInput)="orgValueChange(ref.value)">
app.module.ts
:
import{MatDateFormats, MAT_DATE_FORMATS, NativeDateAdapter, DateAdapter} from '@angular/material';
const MY_DATE_FORMATS = {
parse: {
dateInput: { day: 'numeric', month: 'numeric', year: 'numeric' }
},
display: {
dateInput: 'input',
monthYearLabel: { year: 'numeric', month: 'short' },
dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },
monthYearA11yLabel: { year: 'numeric', month: 'long' },
}
};
export class AppDateAdapter extends NativeDateAdapter {
format(date: Date, displayFormat: Object): string {
if (displayFormat === 'input') {
const day = date.getDate();
const month = date.getMonth() + 1;
const year = date.getFullYear();
return `${day}/${month}/${year}`;
} else {
return date.toDateString();
}
}
}
{provide: DateAdapter, useClass: AppDateAdapter},
{provide: MAT_DATE_FORMATS, useValue: MY_DATE_FORMATS}
在app.module.ts的提供者中添加以下内容:
import{MatDateFormats, MAT_DATE_FORMATS, NativeDateAdapter, DateAdapter} from '@angular/material';
const MY_DATE_FORMATS = {
parse: {
dateInput: { day: 'numeric', month: 'numeric', year: 'numeric' }
},
display: {
dateInput: 'input',
monthYearLabel: { year: 'numeric', month: 'short' },
dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },
monthYearA11yLabel: { year: 'numeric', month: 'long' },
}
};
export class AppDateAdapter extends NativeDateAdapter {
format(date: Date, displayFormat: Object): string {
if (displayFormat === 'input') {
const day = date.getDate();
const month = date.getMonth() + 1;
const year = date.getFullYear();
return `${day}/${month}/${year}`;
} else {
return date.toDateString();
}
}
}
{provide: DateAdapter, useClass: AppDateAdapter},
{provide: MAT_DATE_FORMATS, useValue: MY_DATE_FORMATS}
我在Angular 7中工作,实现如下
someMethodName(date: any) {
// your code here
}
在类中声明一个事件:
@Output()
dateChange:EventEmitter< MatDatepickerInputEvent< any>>;
您的html文件输入将是:
<input matInput [matDatepicker]="enddate" placeholder=""
(dateChange)="someMethodName($event)" formControlName="EndDate">
MatDatePicker中似乎存在缺陷,因此如果您首先清除日期(如果有值),请转到另一个字段,然后使用手动输入编辑该字段(不使用日期选择器),然后离开该字段,则切换月份和日期。为了纠正这种行为,除了AppDateAdapter类中的“format”方法外,还必须定义“parse”方法(请参见Rak2018的答案): 除上述情况外,这是有效的。因此,问题是默认的“parse”方法不符合MAT_DATE_LOCALE设置
另请参见以下是我所做的,第9部分: html:
ts:
@Output()
dateChange:EventEmitter=新的EventEmitter();
onDateChange():void{
this.dateChange.emit();
}
您能否详细说明如何在ts文件中使用它。我是否应该与这些发射器一起创建这些函数?@UmairJameelMatDatePicker
提供了这些事件。我已经更新了我的ansI,我也面临着同样的问题。请单击答案左侧的复选标记,结束您的问题。关于ngChangeControl的提示,我认为这应该标记为此问题的答案。我认为这是关于格式化的第二个问题的正确答案。它在正常模式下运行良好,但当我在prod模式下构建项目时,它会抛出错误。”错误:错误:内部错误:未知标识符{“parse”:{“dateInput”:{“month”:“numeric”,“year”:“numeric”,“day”:“numeric”},display:{“dateInput”:“input”}
@Output()
dateChange: EventEmitter<MatDatepickerInputEvent<any>> = new EventEmitter();
onDateChange(): void {
this.dateChange.emit();
}