问题描述
我正在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 演示。