为什么equalTo只能在FireBase中查找字符串?

时间:2017-03-27 07:09:43

标签: angular angularfire2

我正在尝试一个简单的查询:

@Input('jobId') id: number;

comments: FirebaseListObservable<any>;

this.comments = this.af.database.list('comments/jobComments', {
  query: {
    orderByChild: 'jobId',
    equalTo: <number>this.id
  }
}).map((array) => array.reverse()) as FirebaseListObservable<any[]>;

我有一些jobId是字符串,其余的是数字。我很快就会把它们全都搞定。但由于某种原因,这只返回其jobId格式化为字符串的结果,而不返回jobId为整数的任何人。

如果他们的jobId在FireBase中显示为

,则上述代码仅返回注释
jobId: "1"

但不是这样:

jobId: 1

1 个答案:

答案 0 :(得分:1)

<number>是一个TypeScript强制转换。它是静态的,只是告诉TypeScript该值是number

在运行时,这是无关紧要的。如果this.id包含字符串,则传递给equalTo的值将是一个字符串 - 而不是一个数字 - 它只会与Firebase中的"1"匹配。

如果您想确保分配给equalTo的值是一个数字,您可以这样做:

query: {
  orderByChild: 'jobId',
  equalTo: Number.parseInt(this.id, 10)
}