gpt4 book ai didi

angular - 将类型为 datetime-local 的输入绑定(bind)到 Angular 2 中的 Date 属性

转载 作者:太空狗 更新时间:2023-10-29 16:56:14 27 4
gpt4 key购买 nike

可以将 Date 类型的组件属性绑定(bind)到类型设置为 datetime-local 的 HTML5 输入吗?

在我的组件中我有一个属性:

public filterDateFrom: Date;

在我的模板中,我将输入定义为:

<input type="datetime-local" [(ngModel)]="filterDateFrom" />

但绑定(bind)不起作用。

最佳答案

Demo Plnkr

您可以使用以下格式绑定(bind)到日期:yyyy-MM-ddTHH:mm,您也可以从 date.toISOString().slice(0,16) 获取(切片删除分钟后的时间部分)。

@Component({
selector: 'app',
template: `<input type="datetime-local" [value]="date"
(change)="date=$event.target.value" /> {{date}}`
})
export class AppComponent {
date: string;
constructor() {
this.date = new Date().toISOString().slice(0, 16);
}
}

请记住,date.toISOString() 将返回与本地时间的日期偏移量。您也可以自己构造日期字符串:

private toDateString(date: Date): string {
return (date.getFullYear().toString() + '-'
+ ("0" + (date.getMonth() + 1)).slice(-2) + '-'
+ ("0" + (date.getDate())).slice(-2))
+ 'T' + date.toTimeString().slice(0,5);
}

如果您希望能够将选择绑定(bind)到 Date 模型,您可以使用它来构建自定义日期组件:

@Component({
selector: 'my-date',
events: ['dateChange'],
template: `<input type="datetime-local" [value] = "_date"
(change) = "onDateChange($event.target.value)" />`
})
export class MyDate{
private _date: string;
@Input() set date(d: Date) {
this._date = this.toDateString(d);
}
@Output() dateChange: EventEmitter<Date>;
constructor() {
this.date = new Date();
this.dateChange = new EventEmitter();
}

private toDateString(date: Date): string {
return (date.getFullYear().toString() + '-'
+ ("0" + (date.getMonth() + 1)).slice(-2) + '-'
+ ("0" + (date.getDate())).slice(-2))
+ 'T' + date.toTimeString().slice(0,5);
}

private parseDateString(date:string): Date {
date = date.replace('T','-');
var parts = date.split('-');
var timeParts = parts[3].split(':');

// new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
return new Date(parts[0], parts[1]-1, parts[2], timeParts[0], timeParts[1]); // Note: months are 0-based

}

private onDateChange(value: string): void {
if (value != this._date) {
var parsedDate = this.parseDateString(value);

// check if date is valid first
if (parsedDate.getTime() != NaN) {
this._date = value;
this.dateChange.emit(parsedDate);
}
}
}
}

您的组件的用户将通过双向模型绑定(bind)绑定(bind)到 Date 模型:

@Component({
selector: 'my-app',
directives: [MyDate],
template: '<my-date [(date)]="date"></my-date> {{date}}'
})
export class AppComponent {
@Input() date: Date;
constructor() {
this.date = new Date();
}
}

或者如果你想避免自定义标签,将组件重写为指令:

<input type="datetime-local" [(date)]="date" />

Demo Plnkr with Directive

关于angular - 将类型为 datetime-local 的输入绑定(bind)到 Angular 2 中的 Date 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34546447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com