【发布时间】:2019-01-10 04:22:58
【问题描述】:
我正在尝试使用 angularfire2 和 firebase 实时数据库实时更新我的 ionic 4 应用程序中的消息。代码如下所示
运行时抛出异常 错误:InvalidPipeArgument: '' for pipe 'AsyncPipe'
如果我删除了 async 这个词,那么它显示得很好,但是当我从另一个实例发布一条新消息时,整个数据都会重复。
html
<ion-list lines="full" style="background:transparent">
<ion-item style="padding-top:10px;" *ngFor="let msg of messages | async">
<ion-row style="width:100%;">
<ion-col size="3">
<ion-row>
<ion-col class="sg-reg-text">{{formatName(msg.name)}}</ion-col>
</ion-row>
<ion-row>
<ion-col style="padding:0;padding-left:8px" class="sg-tiny-text"><ion-icon name="time" color="light"></ion-icon> now</ion-col>
</ion-row>
</ion-col>
<ion-col style="border-bottom: 1px solid #7e7c8d;padding-bottom: 10px">
<ion-row>
<ion-col class="sg-reg-text">{{msg.message}}</ion-col>
</ion-row>
</ion-col>
</ion-row>
</ion-item>
</ion-list>
ts
messages:Post[]
refresh(){
this.messages = []
this.sgSvc.getMessages().subscribe(
(rsp:any) => {
for(let data of rsp){
console.log("hehe:" + JSON.stringify(data))
this.messages.push(new Post(data._name, data._message, data._uid))
}
}
)
}
ngOnInit() {
this.refresh()
}
svc.ts
private msgList: AngularFireList<Post>
getMessages(){
this.msgList = this.db.list<Post>('posts')
return this.msgList.snapshotChanges().pipe(
map(changes =>
changes.map(c => ({ key: c.payload.key, ...c.payload.val() }))
)
);
}
【问题讨论】:
-
这是因为
messages不是Observable<T>,它只是一个Array<T>,您将对象推送到。您不需要或不应该使用async管道和messages。 -
如果我不这样做,那么我会遇到我提到的另一个问题
标签: angular ionic-framework firebase-realtime-database angularfire2 ionic4