AngularFire2:按属性值检索双嵌套对象
我不知道为什么,但我很难接受。考虑下面的模型:AngularFire2:按属性值检索双嵌套对象,angular,firebase,angularfire2,Angular,Firebase,Angularfire2,我不知道为什么,但我很难接受。考虑下面的模型: threads threadId posts postId author: authorId 这个结构对我来说很有意义,因为我想在ngFor中的线程视图中呈现帖子。现在我想在他们的个人资料视图中显示由特定用户撰写的文章列表。但我很难弄清楚如何将它们放入可观察列表中 因为在我想要的对象的路径中有多个键,所以我必须进行大量映射才能到达那里。但Firebaseref路径引用
threads
threadId
posts
postId
author: authorId
这个结构对我来说很有意义,因为我想在ngFor
中的线程视图中呈现帖子。现在我想在他们的个人资料视图中显示由特定用户撰写的文章列表。但我很难弄清楚如何将它们放入可观察列表中
因为在我想要的对象的路径中有多个键,所以我必须进行大量映射才能到达那里。但Firebaseref
路径引用的列表中的列表似乎不可编辑。例如:
getPosts(uid:string):可观察{
让results=this.af.database.list(`/threadsMeta`)
.do(线程=>{
threads.forEach(线程=>{
让posts=thread.posts
posts.forEach(post=>{
//甚至不知道我会在这里做什么,
//但是帖子是不合适的,所以它是没有意义的
})
})
})
返回结果
}
这是有意义的,因为它是一个对象,而不是数组。这个怎么样
getPosts(uid:string):可观察{
让results=this.af.database.list(`/threadsMeta`)
.do(线程=>{
threads.forEach(线程=>{
返回此.af.database.list(`threadsMeta/${thread.$key}/posts`)
.map(posts=>posts.filter(post=>post.author==uid))
})
})
results.subscribe(数据=>console.log(数据))
返回结果
}
没有。这不会过滤任何东西
我需要一个帖子列表,其author
属性等于uid
参数
更新:
现在我正在做这件事,它很管用,但感觉非常难看
getPosts(uid: string): Observable<any> {
let posts: any[] = []
return this.af.database.list(`/threadsMeta`)
.map(threads => {
threads.forEach(thread => {
for (var post in thread.posts) {
if (thread.posts[post].author === uid) {
posts.push(thread)
}
}
})
return Observable.of(posts)
})
}
getPosts(uid:string):可观察{
让帖子:任意[]=[]
返回此.af.database.list(`/threadsMeta`)
.map(线程=>{
threads.forEach(线程=>{
for(thread.posts中的var post){
if(thread.posts[post].author==uid){
柱推(螺纹)
}
}
})
可观察的回报(职位)
})
}
试试这个:
getPosts(uid: string): Observable<any> {
return this.af.database.list(`/threadsMeta`)
.map(threads => {
let posts = [];
threads.forEach(thread => {
posts = thread
.posts
.filter(post => {
posts => posts.filter(post => post.author === uid)
})
});
return posts;
})
}
thread.posts.filter不是一个函数。我认为你不能这样使用过滤器。
getPosts("123").sucbscribe(posts=>{
///posts
});