2016-11-10 6 views
0

Я пытаюсь получить данные JSON с использованием класса Service. Класс обслуживанияУгловой метод 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); 
    } 
} 

Компонентный класс

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

я вижу в консоли, .Не (данные => console.log ("Все:" + JSON .stringify (data))) получает данные JSON, такие как

{"subjectConfig": [{"subject": "Обслуживание данных клиентов", "preselected": false, "initialDueDate": "2016-11- 24" , "actionConfigs": [{ "действие": "SEND", "получатели": [{ "пользователь": { "recipientId": "BD27A4F5923FCA13", "имя_получателя": "ABTABT", "recipientFullname": "ABTABT "," ouId ":" BD27A4F5923FCA13 "," ouName ":" 0015 ", ....

Подписка не передает данные в массив состояния, и я получаю пустой массив« status ». Я хочу, чтобы эти данные были массивом в переменной состояния для целей тестирования. Как я могу получить?

ответ

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, и когда это произойдет, вы назначите status на номер this.status. Во время ожидания вы уже регистрируете (this.status), который изначально пуст.

Вместо этого попробуйте это и проверьте журнал,

console.log("Started"); 
this.generalService.getStatus().subscribe(
     (status: any) => { 
      this.status = status; 
      console.log(this.status); 
     }, 
     (error: any) => this.errorMessage = error 
); 
Смежные вопросы