【发布时间】:2016-11-08 08:31:33
【问题描述】:
参考Global Events in Angular 2 我正在尝试实现一个购物车服务,该服务会在将新商品添加到购物车时发出一个事件。我在另一个名为 navbar(它不是购物车的子项)的组件中订阅了此服务事件,我在其中显示了我的购物车商品数量等。
我的购物车服务:
export class CartService {
public itemAdded$: EventEmitter<any>;
...
constructor(private http: Http){
this.itemAdded$ = new EventEmitter();
this.cart=[];
}
addToCart(id: any): any {
this.itemAdded$.emit(id);
return this.http.get( this.myUrl + 'add' + '/' + id + '/', { withCredentials:true})
.toPromise()
.then(response => response.json())
}
...
...
}
我的导航栏组件:
@Component({
directives:[ROUTER_DIRECTIVES, Cart],
providers:[CartService],
})
export class Navbar implements OnInit{
...
totalCost: any;
cartItemCount : any;
addedItem: any;
constructor(private cartService: CartService){
this.cartService.itemAdded$.subscribe( (id: any) => {
alert(id);
this.onItemAdded(id);
this.fetchCartElements();
});
}
private onItemAdded(item: any): void {
// do something with added item
this.addedItem = item;
}
...
...
}
但是,每当我添加一个项目时,导航栏中什么都不会发生,即 alert(id) 或 onItemAdded() 不会自动调用,因此 cartItemCount 等可以自动更新。
出了什么问题?
【问题讨论】:
-
您在哪里提供这项服务?
-
我没有正确理解您的问题,但在我的导航栏组件中,我已将其添加到 [providers] 中。我用那个更新了我的问题。购物车服务与导航栏直接无关。