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

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

оказание услуг

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

    }
    return this.materials;
  }

getAll() ts

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);
          });
  }

1 ответ

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

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

Другие вопросы по тегам