Angular TransferState - Сериализация / Десериализация - PullRequest
0 голосов
/ 01 ноября 2018

Так что у меня проблема с тем, что данные, которые я храню внутри TransferState на сервере, набраны и имеют свой собственный класс, но когда я читаю данные в браузере, набор теряется, это имеет смысл, так как в угловой документации написано следующее:

Значения в хранилище сериализуются / десериализуются с использованием JSON.stringify / JSON.parse. Поэтому только логические, числовые, строковые, нулевые и не относящиеся к классу объекты будут сериализованы и десериализированы без потерь.

Мне было интересно, есть ли способ добавить наши собственные методы сериализации / десериализации вместо того, чтобы TransferState использовать JSON.stringify / JSON.parse внутри, чтобы я мог самостоятельно выполнить десериализацию и повторно инициализировать требуемые классы.

Если такой опции нет, то, возможно, существует какой-то обратный вызов после десериализации состояния, где я мог бы преобразовать значение, которое JSON.parse предоставило внутри TransferState.

Любая помощь будет принята с благодарностью. Я некоторое время искал ответ в Google, но не смог найти ничего полезного.


UPDATE

На данный момент я добавил небольшой обходной путь, добавив типирование к объекту, предоставленному из TransferState.get. Проблема с этим подходом заключается в том, что мне, возможно, придется повторить процесс для тех же самых распространенных типов, которые используются более чем в одном месте после каждого вызова TransferState.get, есть ли более чистый подход?

Пример обходного пути:

if (this.transferState.hasKey(STATE_KEY)) {
    const state: IState = this.transferState.get<IState>(STATE_KEY, null);
    const deserializedState: State = deserializeState(state);
    this.transferState.remove(STATE_KEY);
    return of(deserializedState);
}
...