Argument non valide pour la pipe 'AsyncPipe'
Alors je me présente quand j'essaie de récupérer mes données à partir de firebase
Invalid argument '{"-KCO4lKzEJPRq0QgkfHO":{"description":"teste","id":1457488598401,"resourceUrl":"tete","title":"test2"}}' for pipe 'AsyncPipe' in [listItems | async in ArcListComponent@2:10]
ArcListComponent
import { Component, OnInit } from "angular2/core";
import { FirebaseService } from "../shared/firebase.service";
import { ArcItem } from "./arc-item.model";
@Component({
selector: "arc-list",
template: `
<ul class="arc-list">
<li *ngFor="#item of listItems | async " class="arc-item">
<h3>{{ item.name}}</h3><a [href]="item.resourceUrl" target="_blank" class="btn btn-success pull-right"><span>Go</span></a>
<hr>
<blockquote>{{ item.description }}</blockquote>
<hr>
</li>
</ul>
`
})
export class ArcListComponent implements OnInit {
listItems: string;
constructor(private _firebaseService: FirebaseService) {}
ngOnInit(): any {
this._firebaseService.getResources().subscribe(
resource => this.listItems = JSON.stringify(resource),
error => console.log(error)
);
}
}
firebase_service
import { Injectable } from "angular2/core";
import { Http } from "angular2/http";
import "rxjs/Rx";
@Injectable()
export class FirebaseService {
constructor(private _http: Http) {}
setResource(id: number, title: string, description: string, resourceUrl: string) {
const body = JSON.stringify({ id: id, title: title, description: description, resourceUrl: resourceUrl});
return this._http
.post("https://######.firebaseio.com/resource.json", body)
.map(response => response.json());
}
getResources() {
return this._http
.get("https://######.firebaseio.com/resource.json")
.map(response => response.json());
}
}
Je sais que je suis en train d'essayer de montrer mes données le mauvais sens, mais je ne sais pas comment résoudre ce problème. toute aide appréciée.
Vous devez vous connecter pour publier un commentaire.
La
async
pipe s'attend à une observables ou une promesse.http.get
etmap
opérateur de retour observables, de sorte que vous pouvez définir l'objet retourné dans lelistItems
propriété de votre composant. Vous n'avez pas besoin de s'abonner dans ce cas:En outre l'objet, cet élément va "recevoir" doit être un tableau pour pouvoir l'utiliser dans un
ngFor
. Vous service renvoie un objet et non pas un tableau de Firebase. Si vous souhaitez effectuer une itération sur les touches de l'objet, vous avez besoin pour mettre en œuvre une coutume pipe:et de l'utiliser comme ceci:
Voir cette question pour plus de détails:
async
le tuyau avec observables et/ou des promesses. Il n'abonnement pour vous, donc vous avez juste à passer un observables, sans s'inscrire dans votre code:Cannot find a differ supporting object '[object Object]' in [listItems | async in ArcListComponent@2:10]
Noter que j'ai dû changer mon listItems type d'Observable<aucun> aussi.