2016-11-10 4 views
0

서비스 클래스를 사용하여 JSON 데이터를 가져 오려고합니다. 서비스 클래스각도 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); 
        } 

    } 

GeneralTab 클래스

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) 
    { 
    } 
} 

I 콘솔에 표시하는 수도 있었죠 (데이터 => CONSOLE.LOG ("모두 :"+ JSON .stringify (data)))이 저에게 JSON 데이터를받습니다.

{ "subjectsConfig": [{ "subject": "클라이언트 데이터 유지 관리", "미리 선택": false, "initialDueDate": "2016-11- 24 ","actionConfigs ": [{"action ":"SEND ","수신자 ": ["사용자 ": {"recipientId ":"BD27A4F5923FCA13 ","recipientName ":"ABTABT ","recipientFullname ":"ABTABT ... ","ouName ":"0015 ", ....

구독중인 데이터가 상태 배열에 할당되어 있지 않으며"상태 "배열이 비어 있습니다. 이 데이터를 테스트 용 상태 변수의 배열로 원합니다. 어떻게 내가 가질까?

답변

2

당신이 로그인하는 경우 위의 코드 (getStatus().subscribe)이 비동기이기 때문에 당신이 빈 상태가 표시됩니다 물론

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

같은 응답. 응답을 기다리고 있다면 응답은 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 
); 
관련 문제