我有一个问题,我似乎无法找到解决方案,或者我的搜索错误。问题如下:
背景
我有一个BookingEvent类,其定义如下:
export class BookingEvent {
title: string;
private _startDate: Date;
set startDate(value: Date) {
let valueMoment = moment(value);
if (valueMoment.isValid()) this._startDate = valueMoment.toDate();
}
get startDate(): Date {
return this._startDate;
}
private _endDate: Date;
set endDate(value: Date) {
let valueMoment = moment(value);
if (valueMoment.isValid()) this._endDate = valueMoment.toDate();
}
}
除了上述内容之外,我还有一个表单组件,其中模板以双向方式绑定到属性。
问题
当我将表单数据保存到远程api时,我意识到json生成了我的 startDate & endDate 绑定属性为 _startDate & _endDate 分别来自:
{
"title": "My awesome event",
"_startDate": "2018-04-26T20:50:00.000Z",
"_endDate": "2018-04-27T19:50:00.000Z"
}
问题
为什么原生json映射器使用私有属性名称而不是公共属性?如何确保使用公共属性名称?
答案 0 :(得分:0)
您可以specify a toJSON()
method自定义使用JSON.stringify(...)
序列化对象时的外观。该链接详细说明了它如何确定要包含在被序列化对象中的内容。 JavaScript没有私有属性的概念,所以它们只是其他任何属性。
class BookingEvent {
// all the rest of your code
toJSON() {
return {
title: this.title,
startDate: this.startDate,
endDate: this.endDate
}
}
}