Angular 为什么equalTo number只能在FireBase中查找字符串?
我正在尝试一个简单的查询:Angular 为什么equalTo number只能在FireBase中查找字符串?,angular,angularfire2,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) =>
@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: 1
是一种类型脚本转换。它是静态的,只是告诉TypeScript值是一个数字
在运行时,这并不重要。如果this.id
包含字符串,则传递给equalTo
的值将是一个字符串,而不是一个数字,并且它将仅与Firebase中的“1”
匹配
如果要确保分配给equalTo
的值是一个数字,可以执行以下操作:
查询:{
orderByChild:'jobId',
equalTo:Number.parseInt(this.id,10)
}
我得到一个“number”类型的错误参数不能分配给“string”类型的参数。实际上,this.id是一个数字。然后,在运行时的某个地方,它必须实际分配一个字符串。如果Firebase仅匹配“1”
,则该值为。您可以将其更改为Number.parseInt(this.id为any,10)
,也可以尝试在运行时查找将其设置为字符串的位置和原因。我还可以将其作为字符串写入FireBase,而不仅仅是搜索。但这是一个数字,我发誓最后的评论做到了!如果要与其他类型进行比较,请尝试使用orderByChild代替equalTo。示例:query.orderByChild(“primary_id”).equalTo(1);
jobId: 1