Typescript Angular2同级组件通信,组件未订阅服务

Typescript Angular2同级组件通信,组件未订阅服务,typescript,angular,Typescript,Angular,我正在尝试使用服务在同一页面中的同级组件之间进行通信,但侦听组件未在订阅对象发生更改时启动: 服务 听力成分 我可以在控制台中看到,called1和called2已被记录,但called3未被记录。为什么我的第二个组件没有侦听/订阅?您正在创建两个服务实例: 这里有一个: providers: [ReportService] 这里有一个: providers: [ReportService, HTTP_PROVIDERS], 每次将其添加到提供程序数组时,都会创建一个新实例。您希望将其包含在

我正在尝试使用服务在同一页面中的同级组件之间进行通信,但侦听组件未在订阅对象发生更改时启动:

服务 听力成分
我可以在控制台中看到,
called1
called2
已被记录,但
called3
未被记录。为什么我的第二个组件没有侦听/订阅?

您正在创建两个服务实例:

这里有一个:

providers: [ReportService]
这里有一个:

providers: [ReportService, HTTP_PROVIDERS],
每次将其添加到提供程序数组时,都会创建一个新实例。您希望将其包含在公共父元素的providers数组中。这将使他们能够访问同一个服务实例


如果有多个元素使用
HTTP\u提供程序
,那么也应该将其移动到公共父元素。

Ahh,太好了。因此,子组件从其父组件继承提供程序实例。这只适用于直系子女还是孙子孙女,等等?孙子孙女也是。我通常把它放在我的主应用程序组件上,所以它对任何东西都可用。@EchoLogic你能更新你问题中的工作代码吗。我也面临着同样的问题,我为此投入了数小时。但什么都没有发生。
import {Component, OnInit, OnDestroy} from 'angular2/core';
import {ReportService} from '../../services/riskreport.service';
import {ReportTable} from  '../../classes/riskreport.table.class';
import {HTTP_PROVIDERS}    from 'angular2/http';
import {DataTable} from 'primeng/primeng';
import {Column} from 'primeng/primeng';
import {Subscription}   from 'rxjs/Subscription';

@Component({
    selector: 'report-table',
    templateUrl: '/Reports/riskreport.table.template.html',
    providers: [ReportService, HTTP_PROVIDERS],
    directives: [DataTable, Column]
})

export class ReportTableComponent implements OnInit, OnDestroy {

    public subscription: Subscription;

    constructor(private reportService: ReportService) {
        this.subscription = this.reportService.payload$.subscribe(m => console.log('called3'));
    }

    ngOnInit() {}            

    // Prevent memory leak
    ngOnDestroy() {
        this.subscription.unsubscribe();
    }
}
providers: [ReportService]
providers: [ReportService, HTTP_PROVIDERS],