Javascript 使用startAt对值和键进行Firebase分页不起作用
我正在尝试在ionic3开发的移动应用程序中为搜索页面设置分页。即使提供了键,搜索结果始终只获取前5个值。 我试图换一把钥匙,但问题仍然存在。 请在下面查找代码Javascript 使用startAt对值和键进行Firebase分页不起作用,javascript,firebase,firebase-realtime-database,ionic2,angularfire2,Javascript,Firebase,Firebase Realtime Database,Ionic2,Angularfire2,我正在尝试在ionic3开发的移动应用程序中为搜索页面设置分页。即使提供了键,搜索结果始终只获取前5个值。 我试图换一把钥匙,但问题仍然存在。 请在下面查找代码 this.storeListRefss$ = this.db.list(`/productList/` + this.storeId + `/`, { query: { orderByChild: 'product_name_search', limitToFirst: 5, startAt: { valu
this.storeListRefss$ = this.db.list(`/productList/` + this.storeId + `/`, {
query: {
orderByChild: 'product_name_search',
limitToFirst: 5,
startAt: { value: 'milk', key: '-L2Z8INhE8mFA4fWwiGk' },
endAt: self.searchValue + "\uf8ff"
}
});
this.storeListRefss$.subscribe((result) => {
result.forEach((element) => {
self.searchResults.push(element);
});
console.log(this.searchResults);
});
这是iam从firebase提取的json数据示例
{
"-L2Z8Gvp-T5O3r46dQO4" : {
"product_desc" : "",
"product_img" : "",
"product_name" : "2-POCKET PAPER FOLDER",
"product_name_search" : "2-pocket paper folder",
"product_reg_price" : "0.7900",
"product_sales_price" : "0.7900",
"product_upc" : "718103177610",
"status" : 1
},
"-L2Z8Gvp-T5O3r46dQO5" : {
"product_desc" : "",
"product_img" : "",
"product_name" : "3 MUSKETEERS BITES",
"product_name_search" : "3 musketeers bites",
"product_reg_price" : "1.9900",
"product_sales_price" : "1.9900",
"product_upc" : "040000422471",
"status" : 1
}
}
您使用的是AngularFire的旧版本,它不支持查询API中的
startAt()
或endAt()
的第二个参数
您有两个选项:升级到新api或创建引用并将其传递到list()
方法。我建议升级到更简单的新版本5 API。但我将在下面详述这两个方面
选项1-创建引用,而不是使用查询API
constructor(private db: AngularFireDatabase) {
const ref = db.database.ref(`/productList/` + this.storeId);
const query = ref
.orderByChild('product_name_search')
.limitToFirst(5)
.startAt('milk', '-L2Z8INhE8mFA4fWwiGk')
.endAt(self.searchValue + "\uf8ff");
const list$ = db.list(query);
}
constructor(private db: AngularFireDatabase) {
const list$ = db.list(`/productList/` + this.storeId, ref => {
return ref
.orderByChild('product_name_search')
.limitToFirst(5)
.startAt('milk', '-L2Z8INhE8mFA4fWwiGk')
.endAt(this.searchValue + "\uf8ff");
}).valueChanges();
}
选项2-升级到新API
constructor(private db: AngularFireDatabase) {
const ref = db.database.ref(`/productList/` + this.storeId);
const query = ref
.orderByChild('product_name_search')
.limitToFirst(5)
.startAt('milk', '-L2Z8INhE8mFA4fWwiGk')
.endAt(self.searchValue + "\uf8ff");
const list$ = db.list(query);
}
constructor(private db: AngularFireDatabase) {
const list$ = db.list(`/productList/` + this.storeId, ref => {
return ref
.orderByChild('product_name_search')
.limitToFirst(5)
.startAt('milk', '-L2Z8INhE8mFA4fWwiGk')
.endAt(this.searchValue + "\uf8ff");
}).valueChanges();
}
您是否可以更新您的问题以包含您正在查询的JSON(作为文本,无屏幕截图)。您可以通过单击“导出JSON”中的链接来实现这一点?如果你用硬编码的值而不是
self.searchValue
和self.keyPagination
来重现问题,这也很好,因为我们无法知道它们是什么。@frankvanpoffelen我已经添加了json和硬记录的引用值。你的json中没有属性name\u search
。您可能打算使用product\u name\u search
@FrankvanPuffelen抱歉,我重新编辑了代码,在粘贴到stackoverflow时丢失了它。即使使用“产品名称搜索”,问题仍然存在