Angular 5.2.10 - TypeScript 2.4.2属性访问者json映射

时间:2018-04-28 00:11:01

标签: json angular typescript

我有一个问题,我似乎无法找到解决方案,或者我的搜索错误。问题如下:

背景

我有一个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映射器使用私有属性名称而不是公共属性?如何确保使用公共属性名称?

1 个答案:

答案 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
        }
    }
}