2017-03-27 58 views
1

は、私は単純なクエリしようとしています:EqualToはFireBaseの文字列のみを検索するのはなぜですか?

@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

<number>は、活字体のキャストです。これは静的で、値がnumberであることを単にTypeScriptに通知します。

実行時には、何もカウントされません。 this.idに文字列が含まれている場合、equalToに渡される値はではなく、という数字の文字列になり、Firebaseの"1"にのみ一致します。

あなたはequalToに割り当てられた値が数値であることを確認したい場合は、あなたがこのような何か行うことができます:

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

を私は「数」タイプのエラー引数を取得するには、タイプ「文字列のパラメータに割り当て可能ではありません' this.idは実際には数字です。 – Jus10

+0

それから、どこかで、実行時に実際に文字列が割り当てられている必要があります。 Firebaseが値 "1"と一致しているだけの場合'Number.parseInt(this.id as any、10)'に変更するか、実行時に文字列に設定されている場所とその理由を調べることができます。 – cartant

+0

私はFireBaseに文字列として書き込むだけでなく、検索します。しかしそれは私が誓う数字だ – Jus10

関連する問題