我在角度2中有一个ShareService,在另一个组件中我订阅了,这是我的代码:
*******ShareService ***********************************
private ShopItem$ = new Subject<any>();
ShopItem$_ = this.ShopItem$.asObservable();
public addToCart(item : any){
this.ShopItem$.next(item);
}
*************in another component**********************
_shareService.ShopItem$_.subscribe((item) => {
alert("hiii"); <====>this functions execute twice
this.ADD_TO_CART(item);<====>this functions execute twice
});
我的问题是ADD_TO_CART()函数执行两次!为什么?我不想让我的购物车功能执行两次,如何解决这个问题? ShareService没有任何问题我用函数测试它并且一旦执行。
答案 0 :(得分:0)
正如评论中所讨论的,这可能是由于多次订阅。要验证它不是这个,您可以将其放在您的订阅上方,如下所示:
Product.distinct.includes(:promotion).select('promotions.advertised as featured').
references(:promotion).order('featured').to_sql
SELECT DISTINCT promotions.advertised as featured, "products"."id" AS t0_r0, "products"."name" AS t0_r1, … FROM "products"
LEFT OUTER JOIN "promotions" ON "promotions"."product_id" = "products"."id" ORDER BY featured
注意这适用于rxjs 4,在版本5中,您可能需要不同的语法。
它应该给你0,如果你得到另一个值,你有一个已经有效的订阅。