我想从RealTime数据库获取评论。我确实完成了任务,但只有在返回页面后才会显示对象(不刷新)。
blog.service.ts中的默认angularfire2 constuctor
constructor(public afDb: AngularFireDatabase) {}
我的功能是从DB中获取评论。这只是众多函数中的一个,我不知道如何在一个过程中获取引用或对象,我想出了这样的函数。
getComments(blogTitle: string) {
const blogsRef = this.afDb.database.ref('blog-pl');
let commentsRef = null;
blogsRef.orderByChild('title').equalTo(blogTitle).on("child_added", function (snapshot) {
if (snapshot.hasChild('comments')) {
commentsRef = snapshot.child('comments').ref;
}
});
return this.afDb.list<Comment>(commentsRef, ref =>
ref.orderByChild('timestamp')
).valueChanges();
}
当然我想得到Observable Comment [],但我得到null。问题是评论不能进入
this.afDb.list<Comment>(commentsRef,...
返回值之前。我试过在函数中返回它,我在其中指定了对commentsRef的引用。但它呼吁 错误:(56,9)TS2347:无类型函数调用可能不接受类型参数。 我无法解决这个问题。
尝试在comments.component.ts
中获取它public currentComments: Observable<Comment[]>;
constructor(private blogService: BlogService, private authServicec: AuthService) {}
ngOnInit(): void {
this.currentComments = this.blogService.getComments(this.blogTitle);
this.currentComments.subscribe(val => {
if (val.length != 0) {
this.areAnyComms = true;
}})
}
使用
在html中显示它<ul *ngFor="let curUserReview of (currentUsersReviews | async)?.slice().reverse()">
等待您的建议并感谢您的回答。
答案 0 :(得分:0)
你应该把它放在第一次获取中,因为数据是异步的。尝试
getComments(blogTitle: string) {
const blogsRef = this.afDb.database.ref('blog-pl');
let commentsRef = null;
return blogsRef.orderByChild('title').equalTo(blogTitle).on("child_added", function (snapshot) {
if (snapshot.hasChild('comments')) {
commentsRef = snapshot.child('comments').ref;
return this.afDb.list<Comment>(commentsRef, ref =>
ref.orderByChild('timestamp')
).valueChanges();
}
});
}