没有年份ngModel的Ionic 3 ion-datetime显示格式将为空白

问题描述

我正在ionic 3应用程序中建立表单,并使用ion-datetime输入了生日。由于某些隐私原因,我无法获得人们的出生年份。但是当我用DD MMMM设置ion-datetime格式时。 ngModel是空白的,但是当我有年份时DD MMMM YYYY,它将正常获取用户输入。我可以知道如何解决吗?下面是我的代码

<ion-datetime displayFormat="DD MMMM" [(ngModel)]="formData.birthday"></ion-datetime>

还有闪电战:

https://stackblitz.com/edit/ionic-9q3aas?file=pages%2Fabout%2Fabout.html

解决方法

这确实是一个非常奇怪的问题!

我认为这个问题是由于this line of code是Ionic的源代码造成的:

_inputNgModelEvent(): any {
  return convertDataToISO(this.value);
}

似乎Ionic正在尝试将所选值转换为ISO日期,但是如果年份不存在,则它不是有效的ISO日期。一种解决方法是像这样直接监听ionChange事件:

<ion-header>
  <ion-navbar>
    <ion-title>
      Test
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <ion-item>
  <ion-label>Value</ion-label>
  <ion-datetime 
    displayFormat="DD MMMM"
    (ionChange)="updateValues($event)" <--- here!
  ></ion-datetime>

  </ion-item>
  <ion-item>
    <button ion-button (click)="printValues()">Show Result in Console</button>
  </ion-item>
</ion-content>

然后在您的组件代码中,您可以处理该事件以获取选定的值:

import { Component } from '@angular/core';

@Component({
  selector: 'page-test',templateUrl: 'test.html'
})
export class TestPage {
  public day: number;
  public month: number;

  updateValues(values: any) {
    if(values) {
      this.day = values.day;
      this.month = values.month;
    }
  }

  printValues() {
    console.log(`day: ${this.day}`);
    console.log(`month: ${this.month}`);
  }
}

请查看更新的 stackblitz 演示。