Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Javascript 使用startAt对值和键进行Firebase分页不起作用_Javascript_Firebase_Firebase Realtime Database_Ionic2_Angularfire2 - Fatal编程技术网

Javascript 使用startAt对值和键进行Firebase分页不起作用

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

我正在尝试在ionic3开发的移动应用程序中为搜索页面设置分页。即使提供了键,搜索结果始终只获取前5个值。 我试图换一把钥匙,但问题仍然存在。 请在下面查找代码

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时丢失了它。即使使用“产品名称搜索”,问题仍然存在