2016-10-19 21 views
0

Firebaseの複数のサブツリーの子ノードの数をビューに表示する必要があります。コンテキストでは、私のアプリはプロセスのさまざまな段階でユーザーをカウントしています。AngularFire2を使用してFirebaseノードの子供の数を取得しますか?

ルートノード(ステージ)には2つのサブツリー(stageOne、stageTwo)があります。各サブツリーには、ビューにカウントして表示する必要がある可変数の子ノードが含まれています。

データベース:

stages 
|__stageOne 
| |__user1 
| |__user2 
| 
|__stageTwo 
    |__user3 

コンポーネント:

stageObject: FirebaseObjectObservable<any>; 

constructor(public af: AngularFire){ 
    this.stageObject = af.database.object('/stages'); 
} 

ビュー(表示されません)

<h3>Stage 1 Count = {{ (stageObject | async)?.stages.stageOne.length }}</h3> 
<h3>Stage 2 Count = {{ (stageObject | async)?.stages.stageTwo.length }}</h3> 

ビュー(それがどのように見えるべきか):

Stage 1 Count = 2 
Stage 2 Count = 1 

答えて

2

あなたは(すべての項目をロードせず)AngularFire2でカウントを取得することはできませんが、REST APIを使用することができます。shallow=trueを使用して

this.http.get('https://your-app-name.firebaseio.com/stages/stageOne.json?shallow=true') 
    .map(response => response.json()) 
    .subscribe(items => Object.keys(items).length) 

「を選択し」ノードのすべての子供たちのためだけのキーを返します。


あなたがそれらのすべてをロードしたい場合は、あなたがlist()を使用することができます。

this.stageOneObject = af.database.list('/stages/stageOne'); 

またはオブジェクトを配列に変換:

this.stageOneObject = Object.keys(this.stageObject.stageOne) 
          .map(key => this.stageObject.stageOne[key]); 
+0

REST APIソリューション結果 'ネットリソース不足には、 'クロムブラウザのエラー – alltej

+0

残りのAPI解決策は、認証がないときに動作する可能性があります。そうしないと、失敗する可能性があります。 –

関連する問題