2017-05-09 2 views
0

현재 클래스 용 ionic2 및 firebase를 사용하여 앱을 만들고 있는데 문제가 있습니다. 질문에 관련성이 없기 때문에 코드를 게시하지 않습니다.Firebase로 키 가져 오기

내 데이터베이스에 사람들이 만들 수있는 '그룹'이 있습니다. '그룹'이 있어야 해당 그룹을 저장할 수 있습니다. 내가 현재하고있는 방식은 사용자가 addGroup 버튼을 클릭하고 currentUser가 그룹의 이름을 입력하여 해당 그룹의 사용자 목록에 추가된다는 것입니다. (예. 비밀 번호가 필요하거나 나중에 비슷한 사람이 분명 그룹 이름으로 가입 할 수 없어야합니다.)

* 그룹의 이름이 모두 다르기 때문에 데이터베이스를 쿼리 할 수 ​​있어야합니다. 단일 참조 점 문제는 내가 어떻게 알 수 있는지입니다. y 데이터베이스를 쿼리하고 원하는 그룹 개체의 키 값을 가져옵니다.

나는 물건을보고 계속해서 물건의 열쇠를 얻는 간단한 방법을 찾지 못한다. 나는 이것이 바보 같은 질문 인 것처럼 느낀다. 그러나 나는 typescript, firebase, ionic2에 익숙하지 않아 모든면에서 꽤 빠져있다.

답변

0

먼저 데이터베이스 구조를 정의하십시오. 아래의 내용이 가장 좋습니다.

사용자가 가입하려는 그룹을 클릭하면 그룹 ID를 알고 있다고 가정합니다. 예를 들어 selectoptionvalue 일 수 있습니다.

그룹 목록 가져 오기 :

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

'group'을 호출하는 관찰 가능 항목과 캐시 된 그룹의 배열 사이에 충돌이있었습니다. 나는'그룹 $ '의 이름을 바꾸었다. –

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 그것은 단지 하나의 요소를 받아야합니까? 목록에서 해당 요소의 키를 얻으려면 어떻게해야합니까? –