我正在使用Angular v2.1
,我正在尝试让组件通过共享服务发送消息。
我希望首先将数据从第一个组件company.component.ts
发送到第二个组件modal.component.ts
。
我不确切知道问题的确切位置(如果是在发送或接收数据时)。当我调试接收数据时,我找到了一个Subscriber对象:
Subscriber {closed: false, syncErrorValue: null, syncErrorThrown: false, syncErrorThrowable: false, isStopped: false…}
modal.service.ts
中的:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class ModalService {
private sharedCompanySource = new Subject<string>();
sharedCompany = this.sharedCompanySource.asObservable();
getCompany(){
return this.sharedCompany;
}
setCompany(_company: any){
this.sharedCompanySource.next(_company);
}
}
第一个组件company.component.ts
中的:
import { ModalService } from './modals/modal.service';
@Component({
templateUrl: 'company.component.html',
providers: [
ModalService
]
})
export class CompanyComponent implements OnInit {
constructor(private missionService: ModalService) {
this.missionService.setCompany("hellooooooooooooooo");
}
}
在第二个组件modal.component.ts
中:
import { ModalService } from './modals/modal.service';
import { Subscription } from 'rxjs/Subscription';
@Component({
templateUrl: 'modal.component.html',
providers: [
ModalService
]
})
export class ModalComponent implements OnInit {
subscription:Subscription;
constructor(private missionService: ModalService) {
this.subscription = missionService.sharedCompany.subscribe();
}
}
答案 0 :(得分:3)
两个组件都声明
providers: [
ModalService
]
所以他们不共享服务。两者都有自己独立的ModalService实例。这就是提供商的用途。
如果您想要共享服务,请在其父NgModule的提供程序中声明它。
请注意,您也没有将任何回调传递给subscribe()
,因此当他们开始共享相同的服务时,任何事情都不会发生。