【问题标题】:'query' does not exist in type 'QueryFn' | angularfire2'QueryFn' 类型中不存在'query' |角火2
【发布时间】:2018-03-28 15:36:24
【问题描述】:

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

package.json

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

聊天服务.ts

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

【问题讨论】:

  • 您好,Kendi,感谢您的编辑。
  • 我也面临同样的问题。运气好吗?
  • 我也有同样的问题
  • 这个问题是由于 Angular fire base 贬值了 Angularfire2 为添加此代码它将起作用 import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database-deprecated';
  • 你需要改firebaseListObservable to AngularFireList

标签: typescript firebase angular-cli angularfire2


【解决方案1】:

它不起作用,因为 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

【讨论】:

  • 您好 Orlandster,FirebaseListObservable 在 AngularFire 5.0 中被移除。所以我不能导入 FirebaseListObservable 。
  • @Rijo 感谢您的提示。我没有意识到这一点。我接受了评论,它是这样工作的吗?
  • 您还需要返回该内部查询,因为它不接受 void 方法。你需要做return ref.limitTolast(25).orderByKey(true)
  • 正如我所看到的,它似乎将对象转换为函数
【解决方案2】:

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

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

【讨论】:

  • 您是否必须在该结果上调用 .valueChanges() 才能返回 Observable
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    你可以试试这个代码:

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

    【讨论】:

    • 为了得到一个有用的答案,这个反应需要扩展。解释为什么这是问题的答案。
    【解决方案5】:

    由于 Angular Fire 的更新,将 FirebaseListObservable 替换为 AngularFireList 并确保像这样返回 firebase.database.Query

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

    【讨论】:

      猜你喜欢
      • 2018-04-18
      • 2018-07-19
      • 2022-06-28
      • 1970-01-01
      • 2017-12-22
      • 2017-05-29
      • 2017-05-20
      • 1970-01-01
      • 2017-01-25
      相关资源
      最近更新 更多