У меня есть сервис обратной модели данных. Модель содержит свойство DateTime ( RelevantDateTime ) - текущий UT C DateTime, возвращаемый с сервера. Я хотел бы использовать эти данные в другом компоненте, чем тот, который выполняет службу. Для этого я использую BahaviorSubject (я использовал Subject и изменил его на BahaviorSubject). Это должно быть довольно просто, но почему-то я что-то упускаю - наблюдаемое не испускается - компонент ( HeaderComponent ), который требовал данные, не получает их. См. Мой код:
export class MyService
{
content : any;
//I've changed the Subject to BahaviorSubject
timeOfExecutionSubject = new BahaviorSubject<Date>(new Date());
timeOfExecutionSubjectChanged : Observable<Date> = this.timeOfExecutionSubject.asObservable();
constructor (private httpClient : HttpClient){}
getData()
{
return this.httpClient.get<myModel>(<httpGetUrl>)
.pipe
.tap(
{
res => this.content = res;
this.timeOfExecutionSubject.next(content.RelevantDateTime);
}),
catchError(error => throwError(error))
);
}
getRelevantDateTime()
{
return this.timeOfExecutionSubjectChanged;
}
}
Это компонент, который выполняет службу:
export class MainComponent // This component execute the service
{
constaructor(private myService : MyService ){}
ngOnInit()
{
let sub = this.myService.getData().
subscribe (res =>
{
this.setData(res);
})
}
}
Это компонент, который требует RelevantDataTime
export class HeaderComponent implements OnInit
{
executionDateTime : string;
constructor(private myService: MyService)
{
this.myService.getRelevantDateTime().subscribe(
result => this.executionDateTime = moment(result).format("HH:mm");
)
}
}