'query' 在类型 'QueryFn' 中不存在 | angularfire2

'query' does not exist in type 'QueryFn' | angularfire2

'{ 查询类型的参数:{ limitTolast: number; orderByKey:布尔值; }; }' 不可分配给 'QueryFn' 类型的参数。对象文字只能指定已知属性,并且 'query' 不存在于 'QueryFn' 类型中。

package.json

"angularfire2": "^5.0.0-rc.3",
"firebase": "^4.5.1",

chat.service.ts

getMessages(): FirebaseListObservable<ChatMessage[]> {
    return this.db.list('messages', {
      query: { limitTolast : 25, orderByKey: true}
    });
  }

它不起作用,因为 AngularFire 需要一个函数作为第二个参数传递。

我认为您的示例是测试版中的正确方法。 (不是 100% 肯定)

您已经通过以下方式使用它:

// make sure to provide a child in the orderByChild call
getMessages(): Observable<ChatMessage[]> {
    return this.db.list('/messages', ref => {
      return ref.limitTolast(25).orderByKey(true)
    });
  }

在此处了解有关查询列表的更多信息:https://github.com/angular/angularfire2/blob/master/docs/rtdb/querying-lists.md

QueryFn 必须return一个firebase.database.Query,不能作废。 您可以像这样对查询进行编码,以便更清楚:

getMessages(): Observable<ChatMessage[]> {
    return this.db.list('/messages', ref => {
      let q = ref.limitTolast(25).orderByKey(true);
      return q;
    });
  }

这将非常有效。我试过

getMessages(): Observable<ChatMessage[]> {
    return this.db.list('/messages', ref => 
      let q = ref.limitTolast(25).orderByKey(true);
      return q;
    );
  }

有关查询的更多信息,请转到此 link:https://github.com/angular/angularfire2/blob/master/docs/rtdb/querying-lists.md

您可以试试这个代码:

return this.db.list('/categories', ref => ref.orderByChild('name')).valueChanges();

由于 Angular Fire 的更新,将 FirebaseListObservable 替换为 AngularFireList 并确保你 return firebase.database.Query 喜欢这样

 getMessages(): AngularFireList<ChatMessage[]> {
    return this.db.list('messages', ref => {
      return ref.limitToLast(25).orderByKey();
    });
  }