Если вы хотите отправлять событие каждый раз, когда создается новый продукт, вы должны позвонить на следующий номер вашего productsEvent Subject
.
private productEvent: Subject<Product> = new Subject();
public getProductsEvent(); Subject<Product> {
return this.productEvent;
}
public addProduct(product: Product): Observable<Product> {
delete product.id;
const url = 'http://localhost:8080/createProduct';
return this.http.post<Product>(url, product).pipe(
tap((product: Product) => this.productEvent.next(product)),
);
}
Я использовал трубу и оператора ответвления, чтобы вызвать следующий после того, как новый продукт будет возвращен из вашего запроса HTTP. Метод addProduct
возвращает наблюдаемое, что означает, что ничего не произойдет, пока вы не подпишетесь на него.
При такой настройке вы можете использовать ее следующим образом:
Где-то вы можете добавить товар, вызвав метод и подписавшись.
addProduct(data).subscribe();
И где бы вы ни подписались на событие, вы получите уведомление:
getProductsEvent().subscribe((addedProduct: Product) => {
// Do something with the added product
console.log(addedProduct)
});
Примечание Я сохранил типы, как в вашем вопросе, но мне интересно, совпадает ли тип публикуемых вами данных Product
с типом ответа, также Product
, но, думаю, вы знаете свой Типы объектов лучше, поэтому я оставил все как есть.