Угловая 5.2.10 - Свойство TypeScript 2.4.2, расширение доступа json - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть проблема, для которой я не могу найти решение, или, возможно, мой поиск неправильный. Проблема заключается в следующем:

Фон

У меня есть класс 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 голосов
/ 28 апреля 2018

Вы можете указать toJSON() метод , чтобы настроить внешний вид объекта при сериализации с использованием JSON.stringify(...). Эта ссылка подробно описывает, как она выясняет, что включать в сериализуемый объект. У JavaScript нет концепции частных свойств, поэтому они просто свойства, как и все остальное.

class BookingEvent {
    // all the rest of your code

    toJSON() {
        return {
            title: this.title,
            startDate: this.startDate,
            endDate: this.endDate
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...