2016-11-10 64 views
0

我試圖使用Service類獲取JSON數據。 Service類Angular 2方法不訂閱可觀察的

import { Injectable }     from '@angular/core'; 
import { Http, HttpModule, Response } from '@angular/http'; 
import { GeneralTab }     from './generalTab'; 
import 'rxjs/Rx'; 
import { Observable }     from 'rxjs/Observable'; 


@Injectable() 
export class GeneralTabService { 
     constructor(private _http : Http) { 

        console.log("Http call"); 
    } 

    getStatus(): Observable<any> { 
    return  this._http.get('http://samd.server.lan.at/taskmanagement/rest/taskconfigs/IND?language=EN&access_token=200') 
         .map((res:Response) => <GeneralTab[]>res.json()) 
         .do(data => console.log("All: " +  JSON.stringify(data))) 
     .catch(this.handleError); 

} 
    private handleError (error: any) { 
     
    let errMsg = (error.message) ? error.message : 
        error.status ? `${error.status} - ${error.statusText}` : 'Server error'; 
        return Observable.throw(errMsg); 
    } 
} 

Component類

import { Component, OnInit } from '@angular/core'; 
import {GeneralTab} from "./generalTab"; 
import {GeneralTabService} from "./generalTab.service"; 
import { Observable } from 'rxjs/Observable'; 

    @Component({ 
        selector: 'general-tab', 
        templateUrl: '/general.component.html', 
        providers : [GeneralTabService] 

    }) 

    export class GeneralComponent implements OnInit{ 
        title = 'Serving data from General Component'; 

        errorMessage: any; 
        status: GeneralTab []; 
        mode = 'Observable'; 

        constructor (private generalService: GeneralTabService) { 
            this.status = []; 
        } 

        ngOnInit() { 
            console.log("Started"); 
            this.generalService.getStatus().subscribe(
                (status: any) => this.status = status, 
                (error: any) =>  this.errorMessage = error 
            ); 
            console.log(this.status); 
        } 

    } 

常規選項類

export class GeneralTab { 

    constructor(public recipientId : string, 
    public recipientName: string, 
    public recipientFullname: string, 
    public ouId:String, 
    public ouName:String, 
    public institute:number, 
    public shortName:String, 
    public status:String) 
    { 
    } 
} 

我在控制檯看到。做(數據=>的console.log ( 「ALL:」 + JSON .stringify(data)))正在接收JSON數據,例如

{「subjectsConfig」:[{「subject」:「Client Data Maintenance」,「preselected」:false,「initialDueDate」:「2016-11- 24" , 「actionConfigs」:[{ 「動作」: 「SEND」, 「接收者」:[{ 「用戶」:{ 「recipientId」: 「BD27A4F5923FCA13」, 「RECIPIENTNAME」: 「ABTABT」, 「recipientFullname」:「ABTABT 「,」ouId「:」BD27A4F5923FCA13「,」ouName「:」0015「,....

訂閱不會將任何數據分配給狀態數組,並且我正在變空白狀態數組。我想將這些數據作爲狀態變量的數組用於測試目的。如何得到?

回答

2

如果你登錄像

console.log("Started"); 
this.generalService.getStatus().subscribe(
     (status: any) => this.status = status, 
     (error: any) => this.errorMessage = error 
); 
console.log(this.status); 

響應當然,你會看到一個空白的狀態,因爲上面的代碼(getStatus().subscribe)是異步。這意味着你正在提出請求,然後你正在等待subscribe中的響應,當它發出時,您將分配statusthis.status。在等待的時候你已經在記錄(this.status),它最初是空白的。

而是嘗試這一點,並檢查日誌,

console.log("Started"); 
this.generalService.getStatus().subscribe(
     (status: any) => { 
      this.status = status; 
      console.log(this.status); 
     }, 
     (error: any) => this.errorMessage = error 
);