角度2中的shareService - 两次订阅下一个函数

时间:2016-06-06 09:56:33

标签: javascript angularjs typescript angular rxjs

我在角度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没有任何问题我用函数测试它并且一旦执行。

1 个答案:

答案 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,如果你得到另一个值,你有一个已经有效的订阅。