Угловой сброс данных TransferState при изменении маршрута - PullRequest
0 голосов
/ 04 июня 2019

Я использую Angular для рендеринга на стороне сервера и TransferState для передачи данных http с сервера в браузер. Вот мой код:

getProducts() {
    let products = this.tstate.get(PRODUCT_KEY, null as any);
    if (products) {
        return of(products);
    }

    return this.http.post<any>(config.baseUrl+ 'product', {}).pipe(map(
        data => {
            this.tstate.set(PRODUCT_KEY, data as any);
            return data;
        }
    ))
}

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

1 Ответ

1 голос
/ 04 июня 2019

Вы можете прослушивать события маршрутизатора и сбрасывать кэшированные данные после навигации

constructor(private router: Router,
//...)
{
  this.router.events.subscribe(evt => {
  if (evt instanceof NavigationEnd)
  {
    this.tstate.remove(PRODUCT_KEY);
  }

}

Или вы можете прекратить настройку передачи данных, если вы на стороне клиента

constructor(@Inject(PLATFORM_ID) private platformId: Object
//...)
{
}

getProducts() {
    let products = this.tstate.get(PRODUCT_KEY, null as any);
    if (products) {
        this.tstate.remove(PRODUCT_KEY);
        return of(products);
    }

    return this.http.post<any>(config.baseUrl+ 'product', {}).pipe(map(
        data => {
            if(!isPlatformBrowser(this.platformId)
            {
                this.tstate.set(PRODUCT_KEY, data as any);
            }

            return data;
        }
    ))
}
...