2017-06-20 6 views
0

Ich versuche ein Diagramm zu erstellen, das mit Observablen arbeitet, die von http-Anforderung kommen, der folgende Code arbeitet mit einigen gefälschten Daten Ich möchte sie nur durch echte Daten ersetzen, die von einem Backend kommen hier ist -Ende Skript mein Code:Angular2-highcharts mit Observablen in Angular 4 Projekt

mein app.ts:

export class MyVerticalchartComponent { 


    @Input() showMePartially: boolean; 

    options: Object; 

    constructor(public userService3: UserService3) { 

     this.options = { 
     title : { text : '' }, 
     chart: { type: 'area' }, 
     legend: { enabled: false }, 
     credits: { enabled: false }, 
     xAxis: { type: 'datetime', 
       // startOnTick: true, 
       // endOnTick: true, 
       // tickInterval: 24 * 3600 * 1000, 
      }, 
        dateTimeLabelFormats: { 
      second: '%H:%M:%S', 
      minute: '%H:%M:%S', 
      hour: '%H:%M:%S', 
      day: '%H:%M:%S', 
      week: '%H:%M:%S', 
      month: '%H:%M:%S', 
      year: '%H:%M:%S' 
     }, 
     yAxis: { min: 0, 
      max: 100 }, 
     plotOptions: { 
      series: { 
      // pointStart: 0, 
       color: '#648e59', 
       fillOpacity: 0.8, 
       fillColor: '#648e59' 
        } 
     }, 
     series: [{ 
      name: 'Someone1', 
      data: [], // res.json 
     }] 
    }; 
    } 

     public ngOnInit() { 
     this.userService3.getData().subscribe((data) => { 
     this.options.series[0].data.operating_details = data; 
     console.log(data); 
    }); 

} }

mein app.html:

<chart [options]="options"> 
     <series> 
    </series> 
    </chart> 

meine http service.ts:

export interface User3 { 
data: any; 
} 
const usersURL = 'http://my.super.backend.script.com'; 

@Injectable() Exportklasse UserService3 {

users3: beobachtbare;

constructor (public http: Http) { 

     getData() { 

const tick3$ = Observable.timer(100, 60000); 

    return tick3$.flatMap(() => this.http.get(usersURL)).map(res => 
    res.json()).publishBehavior(<User3[]>[]).refCount(); 



} 
    } 

meine Json wie folgt aussieht:

"operating_details":[[1497837618,0],[1497837738,0],[1497837858,0], 
    [1497837978,0],[1497838098,0],[1497838218,0],[1497838338,0], 
    [1497838458,0],[1497838578,0],[1497838698,0],[1497838818,0], 
    [1497838938,0],[1497839058,0],[1497839178,0],[1497839298,0], 
    [1497839418,0],[1497839538,0],[1497839658,0],[1497839778,0]] 

Antwort

1

Regel würden Sie eine Methode in der Service-Datei definieren, die die HTTP-Anforderung aufstellt

getData(){ 
    return this.http.get(usersUrl) 
     .map(res => res.json()); 
} 

dann in Ihrer Komponente Sie app.ts würde das Observable abonnieren.

ngOnInit(){ 
    this.userService3.getData().subscribe(
     res => { 
      this.options.series[0].data = res; // set series data to options object 
     }, 
     err => { 
      // error callback 
     } 
} 
+0

vielen vielen dank dir werde ich es versuchen! –

+0

es funktioniert nicht, tut mir leid, ich habe keine Zeit, es vorher zu testen, aber es sah gut aus, so im Service funktioniert es gut, aber in meiner Komponente, als ich Ihren Code ausprobiert habe ich einen Fehlercode: [ts] Die Eigenschaft 'subscribe' existiert nicht für den Typ 'void'. beliebig –

+0

@EmileCantero klingt wie die Methode, die Sie von der Komponente aufrufen, gibt keine beobachtbare zurück. Entschuldigung, ich habe bemerkt, dass ich die Antwort in meiner Antwort vergessen habe. Ich werde es aktualisieren – LLai