2017-02-22 80 views
0

Я написал свое приложение с ионным 2 и последовал за tutorial of Josh Morony, но я не знаю, как я могу получить определенный элемент из базы данных firebase.Получить данные от Firebase в Ionic 2

Например, у меня есть это дерево:

user 

|__ (user_id) 

    |_ name : 'toto' 

И так далее ...

Я попробовал этот путь:

elt: FirebaseListObservable<any[]>; 
this.elt = af.database.list('/user'); 

Но как я могу работать с выбранными данными?

ответ

1

Я думаю, af.database.list('/user') возвращает Наблюдаемый. Вам нужно подписаться на него. Как это:

af.database.list('/user') 
.subscribe(data => { 
    console.log("Data is : ",data); 
}, 
(ex) => { 
    console.log('Found exception: ', ex); 
}); 

Кроме того, если это в поставщике, и вы хотите, чтобы вернуть данные, вы можете создать новую Observable и вернуть его. Если вам нужна помощь, я также могу отредактировать свой ответ.

4

Я нашел это решение, которое аналогично, чем у вас:

af.database.list('/user', { preserveSnapshot: true}) 
    .subscribe(snapshots=>{ 
     snapshots.forEach(snapshot => { 
      console.log(snapshot.key, snapshot.val()); 
       this.items.push({ 
       id: snapshot.key, 
       name: snapshot.val().name 
      }); 
     }); 
    }); 
3

Для того, чтобы получить данные в виде массива от поставщика вам нужно вернуть обещание, которое будет возвращено, как только firebaseListObservable событие запускается с возвращать данные.

В поставщике .ts

getData(fbPath): Promise<any> { 
    return new Promise(resolve => { 
    this.db.list(fbPath).subscribe(data => { 
     resolve(data); 
    }) 
    }) 
} 

Здесь обещание решает когда data населен и возвращает массив с легким доступом к $value и $key свойствам. Который идеально подходит для создания условных или сложных запросов или поставщика услуг с родовыми свойствами (в отличии от запрашивая снимок firebaseListObservable непосредственно)

В контроллере, то вы можете написать что-то вроде

this.providerName.getData('users').then(data => { 
    console.log('data',data); 
    }) 

Это будет возвращает объект буквального со значениями

  • $ существует
  • $ ключ
  • $ Значение

Так что теперь, если вы хотите матч условно можно перебрать в data с условием соответствия на $key стола users

if(myUserIdVar === data.$key){ // do something here }; 

опрятнее синтаксис можно найти, используя библиотеку как lodash Где, например, если вы хотите, условие, чтобы соответствовать сохраненный идентификатор, скажем firebase.auth().currentUser.uid вы можете сделать простой _.find

import { find } from 'lodash'; 
import * as firebase from 'firebase'; // Or just the firebase auth stuff 
... 

let filteredUser = find(data, ['$key', firebase.auth().currentUser.uid]) 

Значение $key будет равно значению |__ (user_id)