我想从我的 Angular Firestore 调用单个文档

I want to call a single document from my Angular Firestore

我在我的项目中遇到了问题,我正在使用嵌套子路由来显示我项目中的数据,我希望在我单击该特定项目上的按钮后显示该特定项目的数据,我做到了路由正确,只是我无法获得正确的项目功能。

这是我的服务

PostsService.service.ts

getPostById(id: string){
    let docId = this.afs.collection('posts').doc(id).get()
      .subscribe( doc => {
        if(doc.exists){
          console.log('Document Id => ', doc.id)
          console.log('Document data => ', doc.data())
        }else {
          console.log('Document not found')
        }
      });
    return docId;   
}

这是我的单个项目的 TS 函数

.component.ts

posts: Posts[] = [];
post!:any;

constructor(
  private PostsService: PostsService, 
  private route: ActivatedRoute
) {}

ngOnInit(): void {
    let id = this.route.snapshot.params['id']
    this.PostsService.getPostById(id);
}

您正在尝试使用 getPostById() 获取整个集合,然后尝试从结果中查找单个文档。获取整个集合意味着您将阅读 nn 份文档 - 这既浪费又缓慢。

如果你用 getPostById() 提问,那么你也应该用 return 做一些事情。现在你在问,但没有对 return.

做任何事情

我们只获取单个文档怎么样?它会return一个Observable,所以我们可以一直监控文档,或者直接使用面值。

  getPostById(id: string) {
    const itemDoc = this.afs.doc<any>('posts/' + id);
    return itemDoc.valueChanges();
  }

并且在您的组件中,不要忘记取消订阅 Observable。

ngOnInit() {
  let id = this.route.snapshot.params['id'];
  this.PostsService.getPostById(id).subscribe(post => {
  console.log(post);
       })
   }