у меня есть угловой 2 службы, извлекающих данные из API эта услуга 3 подписчика (определенной в компонентах) каждый делает что-то еще с данными (различные графики)Угловое 2 Наблюдаемые с несколькими абонентами
Я заметив, что я делаю три запроса GET для API, в то время как то, что я хочу достичь, - это один запрос и что подписчики будут делиться данными. . Я просматриваю HOT и COLD, наблюдая и пробовал .share() на наблюдаемом, но Я все еще делаю 3 индивидуальных звонка
Обновление, добавление кода
служба
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import {Observable} from 'rxjs/Rx';
// Import RxJs required methods
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import { StationCompliance } from './model/StationCompliance';
@Injectable()
export class StationComplianceService {
private url = '/api/read/stations';
constructor(private http : Http) {
console.log('Started Station compliance service');
}
getStationCompliance() : Observable<StationCompliance []> {
return this.http.get(this.url)
.map((res:Response) => res.json())
.catch((error:any) => Observable.throw(error.json().error || 'Server Error'));
}
}
Компонент 1
import { Component, OnInit } from '@angular/core';
import { CHART_DIRECTIVES } from 'angular2-highcharts';
import { StationComplianceService } from '../station-compliance.service';
@Component({
selector: 'app-up-down-graph',
templateUrl: './up-down-graph.component.html',
styleUrls: ['./up-down-graph.component.css']
})
export class UpDownGraphComponent implements OnInit {
graphData;
errorMessage: string;
options;
constructor(private stationService : StationComplianceService) { }
ngOnInit() {
this.getStationTypes();
}
getStationTypes(){
this.stationService.getStationCompliance()
.subscribe(
graphData => {
this.graphData = graphData;
this.options = {
chart : {type: 'pie',
plotShadow: true
},
plotOptions : {
showInLegend: true
},
title : {text: 'Up and Down devices'},
series: [{
data: this.processStationType(this.graphData)
}]
}
},
error => this.errorMessage = <any>error
);
}
Другие два компонента почти одинаковы, они просто показывают другой график
Благодаря вашему код действительно помог мне – naoru
я потянув меня за волосы об этом «вопросе» и этот пост сделал мой день. Спасибо – sjosen
Пожалуйста, рассмотрите более короткое решение: https://stackoverflow.com/questions/39627396/angular-2-observable-with-multiple-subscribers/48803113#48803113 – zeliboba