Так что у меня проблема с тем, что данные, которые я храню внутри 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);
}