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],