2017-05-09 7 views
0

私は現在、クラス用のionic2とfirebaseを使用してアプリケーションを作成しています。問題が発生しました。 私は質問に関係するものがないので、コードを投稿していません。Firebaseでキーを取得する

私のデータベースには、人々が作成できる「グループ」があります。私が現在やっていることは、ユーザーがaddGroupボタンをクリックして、currentUserがそのグループのユーザーのリストに単にグループの名前を入力するだけで追加されるということです。後でパスワードなどが必要になると、人々は明らかにグループ名で参加するだけではいけません)

*グループの名前はすべて異なるため、データベースを照会して単一の参照点 問題は私がどのようにして正しいことを知ることができないかということですyデータベースを照会し、必要なグループオブジェクトのキー値を取得します。

私は物事を見続けると、オブジェクトのキーを取得する簡単な方法を見つけることができません。私はこれがちょっとした疑問だと思っていますが、私はtypescript、firebase、ionic2に慣れていないので、私はすべてが迷っています。

答えて

0

まず、データベース構造を定義します。

groups 
    <first group> (Firebase-generated ID) 
    name: "Cat lovers" 
    users: 
     user1ID: true 
     user2ID: true 
    <second group> 
    ... 

ユーザーが参加したいグループをクリックすると、グループIDがわかります。例えば、selectの中にoptionvalueとすることができる。

グループのリストを取得:SELECT INTOグループのリストを移入するには

groups$ = this.angularFireDatabase.list('groups'); 

を:

<select> 
    <option *ngFor="let group of groups$ | async" [value]="group.$key"> 
    {{group.name}} 
    </option> 
</select> 

新しいグループを作成するには:

groups$.push({name: "Dog lovers"}) 

選択を(ドロップダウン)が自動的に更新されます。

addUserToGroup(groupId, userId) { 
    this.angularFireDatabase.list(`groups/${groupID}/users`).update(userID, true); 
} 

を、その名前に基づいてグループを見つけるには:コメントに質問の

// Define the shape of a group for better type checking. 
interface Group { name: string; users: {[userId: string]: boolean;}; } 

// Keep local list of groups. 
groups$: FirebaseListObservable<Group>; 
groups: Group[]; 

// Keep an updated local copy of groups. 
ngOnInit() { 
    this.angularFireDatabase.list('groups').subscribe(groups => this.groups = groups); 
} 

function findGroupByName(name) { 
    return this.groups.find(group => group.name === name); 
} 
+0

私は仕事のほとんどを得ています。リストを印刷せずにIDを取得して、それをクリックさせる方法はありますか?さて、ユーザーは、彼らが参加したいシェルターの名前で入力し、次にタイプコピーで、私は名前に基づいてグループを見つける、キーをつかんで、そのユーザーリストを更新します。 –

+0

FirebaseListObservableのfindメソッドは存在しません。私が輸入する必要があるものはありますか? –

+0

私は 'groups'を呼び出す観測値とキャッシュされたグループの配列との間に矛盾がありました。私は以前の 'groups $'の名前を変更しました。 –

0

回答をグループにユーザーを追加するには

。 このようにデータベースを照会することができます

this.group_val:any="group1" 
let group=db.list('/groups', { 
    query: { 
    orderByChild: GroupName, //here specify the name of field in groups 
    equalTo: this.group_val //here specify the value u want to search 
    } 
}); 

group.subscribe(grp=> { 
      //you can use the grup object here 
}) 
+0

私は:limittofirst:1を追加すれば、それは1つの要素を正しく取得する必要がありますか?リスト内のその要素のキーを取得するにはどうすればよいですか? –

関連する問題