まず、データベース構造を定義します。
groups
<first group> (Firebase-generated ID)
name: "Cat lovers"
users:
user1ID: true
user2ID: true
<second group>
...
ユーザーが参加したいグループをクリックすると、グループIDがわかります。例えば、select
の中にoption
のvalue
とすることができる。
グループのリストを取得: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);
}
私は仕事のほとんどを得ています。リストを印刷せずにIDを取得して、それをクリックさせる方法はありますか?さて、ユーザーは、彼らが参加したいシェルターの名前で入力し、次にタイプコピーで、私は名前に基づいてグループを見つける、キーをつかんで、そのユーザーリストを更新します。 –
FirebaseListObservableのfindメソッドは存在しません。私が輸入する必要があるものはありますか? –
私は 'groups'を呼び出す観測値とキャッシュされたグループの配列との間に矛盾がありました。私は以前の 'groups $'の名前を変更しました。 –