2017-08-15 33 views
1

我有一个network.service.ts和代码如下 -角4 HTTP服务调用不返回数据

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 

import { Peer } from '../model/Peer'; 

import 'rxjs/add/operator/toPromise'; 

@Injectable() 
export class NetworkService { 
    private apiURL = 'http://127.0.0.1:8080/organization/'; 

    constructor(private http: Http) { } 

    public getOrganizationPeers(organizationName): Promise<Peer[]> { 
     return this.http.get(this.apiURL + organizationName + '/peers') 
      .toPromise() 
      .then((response) => response.json().data as Peer[]) 
      .catch(this.handleError); 
    } 

    private handleError(error: any): Promise<any> { 
     console.error('An error occurred', error); 
     return Promise.reject(error.message || error); 
    } 
} 

我的同行list.component.ts是组件文件。

import { Component, OnInit } from '@angular/core'; 

import { NetworkService } from './network.service'; 

import { Peer } from '../model/Peer'; 

@Component({ 
    selector: 'another', 
    templateUrl: './peer-list.template.html' 
}) 

export class PeerListComponent implements OnInit { 

    private peers: Peer[]; 
    constructor(private networkService: NetworkService) { } 

    ngOnInit(): void { 
     console.log('test'); 
     this.networkService.getOrganizationPeers('peerOrg1').then(peers 
=> this.peers = peers); 
    } 
} 

当调用ngOnInit方法时,this.peers始终设置为undefined。数据从服务器返回,但回调无法将数据设置为this.peers变量。有人可以帮我吗?

谢谢。

+0

“角度2/4”的正确标签是“角度”。标签'angularjs'用于'angular'版本1.x(即js/javascript版本)。 – Igor

回答

0
.then((response) => response.json().data as Peer[]) 

应该

.then((response) => response.json() as Peer[]) 

呼叫json()将直接返回有效载荷/数据。你可能想要做.data的唯一原因是你的json结果中有一个名为data的实际属性/字段。