簡體   English   中英

Angular 2方法未訂閱可觀察的

[英]Angular 2 method is not subscribing to the observable

我正在嘗試使用Service類獲取JSON數據。 服務等級

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

我在控制台中看到.do(data => console.log(“ All:” + JSON.stringify(data)))正在獲取JSON數據,例如

{“ subjectsConfig”:[{“ subject”:“客戶端數據維護”,“預選”:false,“ initialDueDate”:“ 2016-11-24”,“ actionConfigs”:[{“ action”:“ SEND”,“收件人“:[{”用戶“:{”收件人ID“:” BD27A4F5923FCA13“,”收件人名稱“:” ABTABT“,”收件人全名“:” ABTABT“,” ouId“:” BD27A4F5923FCA13“,” ouName“:” 0015“, ....

訂閱未將任何數據分配給狀態數組,並且我得到的是空白的“狀態”數組。 我希望將此數據作為狀態變量中的數組進行測試。 如何得到?

如果您將響應記錄為

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

當然,由於上述代碼( getStatus().subscribe )是異步的,因此您將看到一個空白狀態。 這意味着您在發出請求,然后在subscribe中等待響應,當請求到來時,您將向this.status分配status 在等待時,您已經在登錄( this.status ),它最初是空白的。

而是嘗試此操作並檢查日志,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM