2017-01-31 18 views
-1

私はWebアプリケーションを構築するために角度2を使用しています。私は1つまたは複数の条件が子ノードで満たされたときにfirebaseからデータを取得しようとしています。たとえば、私のfirebaseがどのように構造化されているかを以下に示します。私はapprover1mailが[email protected]であり、ステータスが0であるもののエントリを選びたいと思う(両方とも同時に満たさなければならない)。クエリオプションに基づいてfirebaseのエントリのリストを取得

{ 
    "BugList" : { 
    "Company 1" : { 
     "-Kbne6WxelgI6Qv9T0eP" : { 
     "approverEmail" : "[email protected]", 
     "firstName" : "Jack", 
     "lastName" : "Daniels", 
     "noteToApprover" : "Gooday mate", 
     "status" : 0, 
     }, 
     "-Kbne6WxelgI6Qv9T0QP" : { 
     "approverEmail" : "[email protected]", 
     "firstName" : "Tom", 
     "lastName" : "Riddle", 
     "noteToApprover" : "Howdy", 
     "status" : 1, 
     } 
    } 
    }, 
} 

現在のところ、このトピックに関する情報量が限られているangularFire2を使用しています。これは私が現時点で持っていると私は

forms.service.ts 
getPendingApproval() { 
    var currentUser: User = this.userService.getCurrentUser(); 
    const queryList = this.af.database.list('/BugList/' + currentUser.company, { 
     query: { 
      // email field match currentUser.email && status == 0 
     } 
    }); 
} 

と私のapp.component.tsに

getList() { 
    this.list = this.formsService.getPendingApproval() 
    } 

私forms.service.tsのコード

@Injectable() 
export class FormsService { 

    constructor(private af: AngularFire, private userService: UserService) { } 

    saveToFirebase(bug: Bug) { 
     const bugRef = this.af.database.list('/BugsList/' + bug.companyName); 
     return bugRef.push(timesheet) 
    } 


    getPendingApproval() { 
     var currentUser: User = this.userService.getCurrentUser(); 
     const queryList = this.af.database.list('/BugsList/' + currentUser.company, { 
      query: { 

      } 
     }); 
    } 
} 
こだわっていますものです
+0

郵便サービスのためのコード。 –

+0

添付歓声 – user172902

+0

クエリとは何ですか? –

答えて

1

1つのフィールドのみを照会することができます。 (https://github.com/angular/angularfire2/issues/305#issuecomment-230936970

事前フィルタリングされたリストを受信した後に、2番目のフィールドをフィルタリングできます。クエリの

例:Subjectを使用して

query: { 
    orderByChild: 'email', // field name ! 
    equalTo: '[email protected]' // search criteria 
} 

フィルタリング:

const filterSubject = new Subject(); // import {Subject} from 'rxjs/Subject'; 
const queryObservable = af.database.list('/items', { 
    query: { 
    orderByChild: 'email', 
    equalTo: filterSubject 
    } 
}); 

// subscribe to changes 
queryObservable 
    .map(qis => qis.filter(q => q.status == 0)) // FILTER HERE FOR STATUS 
    .subscribe(queriedItems => { 
     console.log(queriedItems); 
    }); 

// trigger the query 
filterSubject.next('[email protected]'); 

// re-trigger the query!!! 
filterSubject.next('[email protected]'); 

ドキュメント:https://github.com/angular/angularfire2/blob/master/docs/4-querying-lists.md

+1

これは受け入れられた回答であるため、http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebaseもご覧ください。この記事では、サーバー側で行う方法について説明します場合によっては2つの値(まだ1つのプロパティのみ)でフィルタリングします。 –

+0

これは '純粋な火のベース 'であり、必要な' angularfire2'ではありません。しかし、知って良い! :) – mxii

+1

AngularFire2はFirebase JavaScript SDKのラッパーです。複数の値を照会する場合の機能は同じです。値を1つのプロパティ(リンクされた回答に記載されている方法で)に組み合わせることができれば、AngularFire2でフィルタリングすることもできます。 –

関連する問題