2016-12-29 72 views
0

Angular 2的新手也许有点基础。显示Observable <any[ ]> HTML内的返回类型

我有一个服务功能getMedia其是可观察到的类型的任何[]返回在订阅该信息到组件:

 getMedia return data

本质上,这是对象数组所以在我的分量I写这个:

export class RecommendationFeedComponent implements OnInit { 

    result:Array<Object>=[]; 

    constructor(private feedService: FeedService, private authService: AuthService, 
       private auth: FirebaseAuth, public af: AngularFire) { } 

    ngOnInit() { 
    this.af.auth.subscribe(
     (user) => { 
      if (user) { 
       this.feedService.getMedia(user.auth.email) 
        .subscribe(result => this.result = result); 
       console.log(this.result); 
      } 
    }) 

    } 

控制台返回空,所以我不知道如何使用它来显示HTML上的数据。

更改的组件和模板:低于这个

<tr class *ngFor="let media of (result)"> 
    <td> 
    <img src={{media.data.images.standard_resolution.url}} height="100" width="100"> 
    </td> 
</tr> 
+0

有什么errorr:

ngOnInit() { this.result = this.af .auth .flatMap(user => this.feedService.getMedia(user.auth.email)) // no subscribe 

然后你的模板里面? – Milad

+0

我的不好,就像你提到的那样。我有另一个错误。感谢帮助! Upvoted。 –

+0

那好吧,接受吗? – Milad

回答

3

订阅是asyncroinous,所以你的console.log应该在它里面,否则这将是

import { Component, OnInit } from '@angular/core'; 
import {FeedService} from "../shared/model/feed.service"; 
import {RestaurantMedia} from "../shared/model/restaurantMedia"; 
import {Observable} from "rxjs/Rx"; 
import {ActivatedRoute, Router} from "@angular/router"; 
import {AuthService} from "../shared/security/auth.service"; 
import {FirebaseAuth, AngularFire} from "angularfire2/index"; 


@Component({ 
    selector: 'recommendation-feed', 
    templateUrl: './recommendation-feed.component.html', 
    styleUrls: ['./recommendation-feed.component.css'] 
}) 
export class RecommendationFeedComponent implements OnInit { 
    //Medias = []; 
    //RestaurantMedias$: Observable<any[]>; 
    result:Array<Object>=[]; 


    constructor(private feedService: FeedService, private authService: AuthService, 
       private auth: FirebaseAuth, public af: AngularFire) { } 

    ngOnInit() { 

     this.af 
     .auth 
     .flatMap(user => this.feedService.getMedia(user.auth.email)) 
     .subscribe(result => { 
       this.result = result; 
      // console.log(this.result); 
      }) 



    } 

} 

// HTML模板代码甚至在订阅功能被调用之前调用。

因此,要解决这个问题:

变化:

  this.feedService.getMedia(user.auth.email) 
       .subscribe(result => this.result = result); 
      console.log(this.result); 

this.feedService.getMedia(user.auth.email) 
       .subscribe(result => { 
         this.result = result 
        console.log(this.result); 

       }); 

顺便说一下,这里有一个更好的方式:

ngOnInit() { 
    this.af 
     .auth 
     .flatMap(user => this.feedService.getMedia(user.auth.email)) 
     .subscribe(result => { 
       this.result = result); 
       console.log(this.result 
     }); 

如果你只想显示没有做任何事的结果在HTML中,你可以使用异步管道:

<div > 
     {{result | async | json }} 
    </div> 
+0

嗨米拉德。感谢您的回应!模板HTML也不太工作,并显示错误,但是当我写这篇这个数据显示了 ​​

+0

分享您的组件它的模板 – Milad

+0

添加到问题 –

相关问题