Angular2 Observable服务似乎没有跨组件工作

时间:2016-08-25 02:20:52

标签: angular typescript observable

我在Angular2中有一个应用程序。哪里有一个包含导航链接等的顶级组件。并且路由器插座嵌套在此内。我想在其中一个嵌套页面上执行操作,以反映顶级组合中的更改。

我试图在Angular2中实现一个Observable服务。它可以在同一个组件中运行。但是当我尝试从根级别订阅Observable时。我没有得到任何活动。

我的服务如下:

import { Injectable } from '@angular/core';
import { Subject }    from 'rxjs/Subject';

@Injectable()
export class Announcer {

    // Observable sources
    private cartTotalSource = new Subject<number>();
    private wishlistTotalSource = new Subject<number>();

    // Observable sources
    cartTotalAnnounced$ = this.cartTotalSource.asObservable();
    wishlistTotalAnnounced$ = this.wishlistTotalSource.asObservable();

    // Service message commands
    announceCartChange(value: number) {
        this.cartTotalSource.next(value);
    }
    announceWishlistChange(value: number) {
        this.wishlistTotalSource.next(value);
    }
}

当我在它运行的组件的上下文中使用它时,我可以宣布,并在同一文件中订阅更新:

ngOnInit(){
    this.announcer.cartTotalAnnounced$.subscribe(total => {
        this.cartTotal = total;
    });
    this.announcer.wishlistTotalAnnounced$.subscribe(total => {
        this.wishlistTotal = total;
    });
}

getCartAndWishlistTotal() {
    this.cartService.getCartTotal(CartType.Cart, "")
        .subscribe(total => {
            this.announcer.announceCartChange(total);
        });

    this.cartService.getCartTotal(CartType.Wishlist, "")
        .subscribe(total => {
            this.announcer.announceWishlistChange(total);
        });
}

但是,在我的顶级组件中(使用上面代码片段中的ngOnInit()完全相同的代码)。用户永远不会开火。

有人能指出我在做错的方向吗?

1 个答案:

答案 0 :(得分:1)

检查您的Announcer服务提供商。您是在顶级还是从您想要的组件中提供?

如果是,您可能正在创建该服务的两个实例。

您应该只在顶级组件中提供Announcer服务。

希望这会有所帮助!!