【发布时间】:2018-06-03 12:32:44
【问题描述】:
我有这项服务:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class MissionService {
// Observable string sources
private missionAnnouncedSource = new Subject<string>();
private missionConfirmedSource = new Subject<string>();
// Observable string streams
missionAnnounced$ = this.missionAnnouncedSource.asObservable();
missionConfirmed$ = this.missionConfirmedSource.asObservable();
// Service message commands
announceMission(mission: string) {
this.missionAnnouncedSource.next(mission);
}
confirmMission(astronaut: string) {
this.missionConfirmedSource.next(astronaut);
}
}
这个组件:
export class ComponentOne {
constructor(private service: MissionService) { }
onClick() {
console.log('entered in the onclick method');
this.service.announceMission('mission started');
this.service.missionAnnounced$.subscribe(response => console.log('from component 1: ' + response), error => console.log('error: ', error))
}
}
这个其他组件:
export class ComponentTwo {
constructor(private service: MissionService) {
console.log('entered in constructor ComponentTwo')
this.service.missionAnnounced$.subscribe(response => console.log('from component 2: ' + response),
error => console.log('error: ', error));
}
}
我不知道为什么 subscribe() 内的 console.log 以及 ComponentTwo 上的响应值从未打印出来,甚至消息 from component 2: 的部分也从未出现过。但是消息entered in constructor ComponentTwo 总是出现.. 也没有出现任何错误消息
【问题讨论】:
-
您是否有多个服务提供者(例如,您是否将其包含在每个组件的
providers列表中)?应该只有一个全球提供商。
标签: angular angular-services angular-components