2017-01-02 1 views
0

Как использовать ссылку AngularFire2 в файле ts в ионном 2? (Например, у меня есть ссылка на мой Firebase)Ионный 2 использует список AngularFire2 в ts-файле

this.courses=this.af.database.list('/CoursesList/2017/Software/A/SemA'); 

Я хочу, чтобы проверить итерацию в TS файл (не в HTML-файл) и сделать что-то с этими данными. Является ли это возможным?

Я пытался сделать это, но я получаю ошибку enter image description here

это мой код

this.courses 
    .subscribe(snapshots => { 
    snapshots.forEach(snapshot => { 
     console.log(snapshot.val()); 


    }); 

ответ

1

Оп! Существует несколько способов сделать это. Вызов .list() возвращает FirebaseListObservable, который является только Observable с использованием некоторых удобных методов, таких как .push(), .set(), .update() и .delete().

Самый простой способ - позвонить .subscribe() и выполнить итерацию по фактическому массиву.

af.database.list('/songs').subscribe(songs => { 
    // songs is the downloaded array 
    // type could simply be any[] or whatever model you need 
    this.songs = songs; 
    // or you can forEach or whatnot 
    this.songs.forEach(song => console.log(song)); 
}); 

Чем более выгодный способ заключается в использовании Observable оператора как .map():

af.database.list('/songs') 
// Almost like a regular array map, but it emits for each item 
// added over time 
.map(song => { 
    song.name = song.name.toUpperCase(); 
    return song; 
}) 
.subscribe(songs => { 
    // songs is the downloaded array 
    this.songs = songs; 
    // All the names will be in caps 
    this.songs.forEach(song => console.log(song.name)); 
}); 

Убедитесь, что вы импортировать оператор .map(), хотя и он не будет работать!

import 'rxjs/add/operator/map` 
+0

отличное объяснение! Я редактировал свой пост, вы можете понять, почему это неправильно? –

+0

Да AngularFire разворачивает снимок по умолчанию, поэтому нет необходимости вызывать '.val()'. Имя параметра не должно быть «моментальными снимками», потому что это фактическое POJO, а не 'DataSnapshot' –

+0

здесь // песни - это загруженный массив this.songs = songs; , какой тип загруженного массива? как заявить об этом? –