Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度材质材质材质日期选择器(更改)事件和格式_Angular_Angular Material_Angular5 - Fatal编程技术网

Angular 角度材质材质材质日期选择器(更改)事件和格式

Angular 角度材质材质材质日期选择器(更改)事件和格式,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

我使用的是angular material datepicker指令,没有什么问题

1。当我打开日期选择器对话框并选择任何日期时,日期会显示在输入文本框中,但我想在输入文本框中发生任何更改时调用函数

现在,若我在输入文本框中手动输入任何值,我将使用(input)指令触发函数,它工作正常,如代码所示。我想在使用日期选择器对话框更改日期时触发相同的函数

2.我还想将日期格式从mm/dd/yyyyy更改为dd/mm/yyyyy。此处,本指令中默认设置了mm/dd/yyyy

<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)">

  • 在html中,您可以使用(ngModelChange)=“functionName()”触发日期更改后的任何函数,并在ts中声明该函数

  • 要更改日期的格式,请执行以下操作:

  • 将此添加到
    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文件中使用它。我是否应该与这些发射器一起创建这些函数?@UmairJameel
    MatDatePicker
    提供了这些事件。我已经更新了我的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();
    }