2016-09-04 128 views
0

我有两位代码,一位工作,一位不工作。这是第一个(工作)版本:无法在用户中分配变量

this.jobs = this.listingsService 
        .getListings(this.title) 
        .subscribe(
         res => {console.log(JSON.parse(res));}  
        ); 

这正确记录我的服务发送到控制台的JSON对象。但是:

this.jobs = this.listingsService 
        .getListings(this.title) 
        .subscribe(
         res => {this.list = JSON.parse(res);}  
        ); 

不起作用。当我尝试将此列表记录到订阅服务器之外的控制台时,它将返回undefined。任何人都知道我在这里做错了什么?

而且,这里是我的服务:

import { Injectable } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Observable }  from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 

@Injectable() 

export class ListingsService{ 
constructor(private http: Http){} 
private url = 'http://localhost:3000/' 

getListings(query: string){ 
    return this.http.get(this.url + query).map(res => res.json()); 
    } 

} 

,并在其整体的组成部分:

import { Component, OnInit, OnChanges } from '@angular/core'; 
import { ActivatedRoute } from '@angular/router'; 
import { DepluralizePipe } from './depluralize.pipe'; 
import { ListingsService } from './listings.service' 
import 'rxjs/Rx'; 

@Component({ 
selector: 'listings', 
templateUrl: './listings.component.html', 
pipes: [DepluralizePipe], 
providers: [ListingsService] 
}) 

export class ListingsComponent{ 
title:string; 
list; 
jobs; 
constructor(private activatedRoute: ActivatedRoute, 
      private listingsService: ListingsService){} 

ngOnInit(){ 
    this.activatedRoute.params.subscribe( 
      params => this.title = params['title'] 
    ) 

    this.jobs = this.listingsService 
        .getListings(this.title) 
        .subscribe(
         res => {this.list = JSON.parse(res);}  
        ); 
    } 

} 
+0

凡在你的代码,你尝试'“登录this.list到控制台”'? –

+0

我在移动设备上,所以我不能编辑它,但它应该在ngOnInit中,但在this.jobs订阅之外 – user114338

+1

'this.list'成员将不具有值,直到异步操作'getListings'已经完成,所以如果你尝试在它完成之前记录它,你会得到'undefined'。可能是这种情况。 –

回答

0

你可能会记录结果的异步调用返回之前。为了验证这一点,尝试添加console.log在你订阅的任务后,立即像这样:

this.jobs = this.listingsService 
       .getListings(this.title) 
       .subscribe(res => { 
        this.list = JSON.parse(res); 
        console.log(this.list); 
       }); 
}