Кэширование и обновление данных в Angular

У меня есть эта проблема в моем угловом приложении, поскольку я кэширую данные. После того, как я добавлю что-то с помощью функции onCreate(). Я вызвал функцию getAll() в функции успешной подписки, чтобы получить новые данные. Тем не менее, я все еще не получаю новые данные. Я считаю, что это из-за данных кеша в моем сервисе. Как я узнаю, есть ли новые данные или как мне исправить кеш моих существующих данных и обновить данные, когда появятся новые данные?

услуга

getAll() {
    if(!this.materials) {
        this.materials = this.httpClient.get<any>(this.url)
                            .map((response => response))   
                            .publishReplay(1)
                            .refCount();

    }
    return this.materials;
  }

получитьВсе() ТС

getAllMaterials() {
    this.subscription = this.materialsService.getAll()
        .subscribe(
          (data:any) => {
            this.materials = data.materials;
            console.log(data);
          },
          error => {
           alert("Error");
           console.log(error);
          });
  }

onCreate() -ts

 onCreateMaterial(form: NgForm){

    const formData = {
      sku: form.value.sku,
      name: form.value.name,
      supplier_id: form.value.supplier,
      price: form.value.price
    }

    this.materialsService.addMaterial(formData)
      .subscribe(
          data => {
            let message = data.message;
            alert(message);
            console.log(data);
            this.modalRef.close();
            this.getAllMaterials();
          },
          error => {
             alert("Error Adding");
             console.log(error);
          });
  }

person Community    schedule 16.10.2017    source источник


Ответы (1)


Провел некоторое исследование .publishReplay().refCount() вы можете прочитать его здесь. Я думаю, проблема в том, что вы используете .publishReplay().refCount() перед тем, как подписаться, чтобы тема помечалась как завершенная после одной итерации, чтобы она больше никогда не срабатывала. Прочитайте об этом здесь. Я сам с этим не знаком, но попробовать стоит.

Если это не так, попробуйте удалить параметр publishReplay и попробуйте вручную отписаться, чтобы увидеть, есть ли какие-либо результаты.

person Krister Torsvik    schedule 16.10.2017