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

时间:2017-10-17 02:50:42

标签: typescript firebase angular-cli angularfire2

类型'{query:{limitTolast:number; orderByKey:boolean; }; ''不能赋值给'QueryFn'类型的参数。对象文字只能指定已知属性,'QueryFn'类型中不存在'query'。

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}
    });
  }

5 个答案:

答案 0 :(得分:6)

它不起作用,因为AngularFire希望将一个函数作为第二个参数传递。

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

您可以通过以下方式使用它:

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

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

答案 1 :(得分:2)

QueryFn必须返回firebase.database.Query,而不是void。 您可以像这样对代码进行编码,以便更清楚:

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

答案 2 :(得分:0)

这将完美地工作。被我试过

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

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

答案 3 :(得分:0)

您可以尝试以下代码:

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

答案 4 :(得分:0)

由于要在Angular Fire上进行更新,请将FirebaseListObservable替换为AngularFireList,并确保您返回firebase.database.Query这样的

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