Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularFire2:按属性值检索双嵌套对象_Angular_Firebase_Angularfire2 - Fatal编程技术网

AngularFire2:按属性值检索双嵌套对象

AngularFire2:按属性值检索双嵌套对象,angular,firebase,angularfire2,Angular,Firebase,Angularfire2,我不知道为什么,但我很难接受。考虑下面的模型: threads threadId posts postId author: authorId 这个结构对我来说很有意义,因为我想在ngFor中的线程视图中呈现帖子。现在我想在他们的个人资料视图中显示由特定用户撰写的文章列表。但我很难弄清楚如何将它们放入可观察列表中 因为在我想要的对象的路径中有多个键,所以我必须进行大量映射才能到达那里。但Firebaseref路径引用

我不知道为什么,但我很难接受。考虑下面的模型:

threads
    threadId
        posts
            postId
                author: authorId
这个结构对我来说很有意义,因为我想在
ngFor
中的线程视图中呈现帖子。现在我想在他们的个人资料视图中显示由特定用户撰写的文章列表。但我很难弄清楚如何将它们放入可观察列表中

因为在我想要的对象的路径中有多个键,所以我必须进行大量映射才能到达那里。但Firebase
ref
路径引用的列表中的列表似乎不可编辑。例如:

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
});