У меня есть приложение Angular, в котором есть много родительских и дочерних компонентов, и мне нужно с ними связаться. Я очень хорошо знаком с взаимодействием между компонентами в Angular, но у меня возникает ситуация, когда я чувствую, что поступаю неправильно.
У меня есть такой сайт, как электронная коммерция, когда пользователь нажимает кнопка для добавления товара модал открыт, чтобы добавить товар, который я покажу на картинке
ModalProductComponent
Но этот модал не имеет связи с моим список категорий с продуктами, которые я покажу на изображении
ProductListComponent
Проблема в том, что мой список продуктов является дочерним компонентом, и я поместил тему в функцию который создает подписку на тему, которую модал генерирует при отправке данных, и возвращает ее обратно с помощью ModalProductComponent.
activeLoad() {
const loadProductData = this.productService.reloadDataObservable$.subscribe(data => {
if (data.methodType === 'store') {
this.category.productList.push(data.productData);
}
});
const sbreloadImgSrcObservable = this.uploadFileService.reloadImgSrc$.subscribe(
response => {
const objIndex = this.category.productList.findIndex(function(element) {
return element.mp_product_id === response.objData.mp_product_id;
});
this.category.productList[objIndex]['srcimglist'] = response.objData['srcimglist'];
this.category.productList[objIndex]['loadState'] = false;
}
);
this.dialog.afterAllClosed.subscribe(
(_) => {
loadProductData.unsubscribe();
sbreloadImgSrcObservable.unsubscribe();
}
);
}
Эта функция выше, теперь я покажу функцию, которую я открываю модальной
openProductDialog() {
const objTemp = { name: 'Adicionar Produto' };
this.dialog.open(DialogFormStoreProductComponent, {
panelClass: 'custom-dialog-product-mp',
width: '920px',
height: 'auto',
maxHeight: '800px',
data: objTemp,
});
this.activeLoad();
}
Я делаю это, потому что, если я добавлю подписку на OnInit, все мои дочерние элементы будут выполняться, и я хочу выполнить только тот продукт, который является клиентом. трахнуться. Так что проблема в том, что я отписываюсь, когда модал закрывается здесь
this.dialog.afterAllClosed.subscribe(
(_) => {
loadProductData.unsubscribe();
sbreloadImgSrcObservable.unsubscribe();
}
);
Когда я это делаю, я не могу создать событие внутри sbreloadImgSrcObservable , которое отправит изображение для моего ребенок, чтобы обновить данные, потому что изображение медленно отправлять.
Так, каков наилучший подход, чтобы заставить эту работу? Потому что, если я не подписываюсь и пользователь нажимает, чтобы открыть модальное и закрыть его, подписка была сделана, и если он делает это на 10 продуктов, список будет go на 10 продуктов, и я не хочу этого для производительности .