我想从我的 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()
获取整个集合,然后尝试从结果中查找单个文档。获取整个集合意味着您将阅读 n
次 n
份文档 - 这既浪费又缓慢。
如果你用 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);
})
}
我在我的项目中遇到了问题,我正在使用嵌套子路由来显示我项目中的数据,我希望在我单击该特定项目上的按钮后显示该特定项目的数据,我做到了路由正确,只是我无法获得正确的项目功能。
这是我的服务
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()
获取整个集合,然后尝试从结果中查找单个文档。获取整个集合意味着您将阅读 n
次 n
份文档 - 这既浪费又缓慢。
如果你用 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);
})
}