我有以下功能
文件:subcategory.service.ts
getSubCategoriesById(inp_subCatid: String): Observable<any>{
this.getSubCategoriesList().snapshotChanges().pipe(
map(changes =>
changes.map(c =>
({ key: c.payload.key, ...c.payload.val() })
)
)
).subscribe(subCategories => {
subCategories.filter(function (subCat) {
return subCat.id == inp_subCatid;
});
});
我正在调用下面文件中的顶级函数
文件:subcategory.page.ts
this.SubCategoryService.getSubCategoriesById(subCatid).subscribe((subCategories: any) => {
this.subCat = subCategories ;
})
我得到的问题是我得到了以下错误信息:ERROR TypeError. "this.SubCategoryService.getSubCategorysById(...)is undefined"。"this.SubCategoryService.getSubCategorysById(...)是未定义的"
我想从文件 "subcategory.service.ts "中获取加载时的数据,希望有人能帮助我。
你的方法应该是这样的。
getSubCategories(inp_subCatid: string): Observable<any> {
return this.getSubCategoriesList().snapshotChanges().pipe(
map(changes => changes.map(c =>
({ key: c.payload.key, ...c.payload.val() })
).filter((subCat) => subCat.id === inp_subCatid)
));
}
然后你就可以像这样使用。
this.subCategoryService.getSubCategories(subCatid)
.subscribe(subCategories => this.subCat = subCategories);
如果我对你的方法有正确的理解的话 我觉得你使用的是firebase... 如果是这样的话 在你调用之后 this.yourService.getSubCategories(subCatid)
第一次,您的订阅将保持激活状态,这样您的子类别将因数据库的每次变化而更新,即使您改变了 subCatid
,之前的数据库查询将是活的。为了避免这种情况的发生,我建议你只采取一个发射的 snapshotChanges()
:
getSubCategories(inp_subCatid: string): Observable<any> {
return this.getSubCategoriesList().snapshotChanges().pipe(
// finish the subscription after receiving the first value
take(1),
map(changes => changes.map(c =>
({ key: c.payload.key, ...c.payload.val() })
).filter((subCat) => subCat.id === inp_subCatid)
));
}
谢谢你
如果我想过滤一个特定的数据,比如 "id"?
getSubCategoriesbyId(inp_subCatid): Observable<any>{
this.getSubCategoriesList().snapshotChanges().pipe(
map(changes =>
changes.map(c =>
({ key: c.payload.key, ...c.payload.val() })
)
)
).subscribe(subCategories => {
subCategories.filter(function (subCat) {
return subCat.id == inp_subCatid;
});
});
}
然后得到过滤后的数据
this.yourService.getSubCategoriesbyId(subCatid)
.subscribe(subCategories => console.log(subCategories));