我在“ reviews_unchecked”集合中添加了评论。管理员必须确认它们。因此,我决定创建一个带有经过验证的评论的其他收藏集,并在确认后将评论添加到“已确认”中,并从“未选中”中删除。
我的评论服务
review: any;
uncheckedReviewCollection: AngularFirestoreCollection<any>;
confirmedReviewCollection: AngularFirestoreCollection<any>;
reviewDocument: AngularFirestoreDocument<any>;
constructor(private afs: AngularFirestore) {
this.uncheckedReviewCollection = this.afs.collection('reviews_unchecked');
this.confirmedReviewCollection = this.afs.collection<Review>('reviews');
}
getData(): Observable<any[]> {
return this.uncheckedReviewCollection
.snapshotChanges()
.pipe(map((actions) => {
return actions.map((a) => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return {id, ...data };
});
})
);
}
getReview(id) {
this.reviewDocument = this.afs.doc<any>('reviews_unchecked/' + id);
this.review = this.reviewDocument.valueChanges();
return this.review;
}
deleteReview(id: string) {
return this.afs.doc<any>(`reviews_unchecked/${id}`).delete();
}
confirmedReview(id) {
this.confirmedReviewCollection.add(this.review);
return this.afs.doc<any>(`reviews_unchecked/${id}`).delete();
}
}
我的组件
review: any;
reviews: Observable<any[]>;
constructor(
private reviewsService: ReviewsService,
) { }
ngOnInit() {
this.reviews = this.reviewsService.getData();
}
deleteReview(id: string) {
this.reviewsService.deleteReview(id);
}
confirmedReview(id: string) {
this.reviewsService.confirmedReview(id);
}
为什么我有此错误以及如何解决它: 错误FirebaseError:“函数CollectionReference.add()要求其第一个参数为对象类型,但它是:自定义Observable对象”
答案 0 :(得分:0)
添加文档时,文档的类型必须为object
,并且不能是类的实例,因此您需要创建单独的接口或类或使用JSON.parse()
进行更改到一个对象。
您可以检查以下GitHub问题:
https://github.com/angular/angularfire2/issues/1335
https://github.com/firebase/firebase-js-sdk/issues/311
尝试以下操作:
confirmedReview(id) {
let firestoreData = JSON.parse(JSON.stringify(this.review));
this.confirmedReviewCollection.add(firestoreData);
return this.afs.doc<any>(`reviews_unchecked/${id}`).delete();
}
来自docs:
JSON.parse()
方法解析一个JSON字符串,构造该字符串描述的JavaScript值或对象