Кэширование и обновление данных в 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 и вручную отписаться, чтобы увидеть, есть ли у него какие-либо результаты.