동일한 문제가있었습니다. 이 github page의 예를 따랐습니다.
그리고 구체적으로, 나는 다음과 같은 서비스와 구성 요소를 만들었다. 그들은 나를 위해 일합니다. 나는 비동기 파이프 (| async)를 사용해야하는 componenent HTML의 * ngIf 문에서 이해할 수 있지만 계속 오류가 발생하여 별도로 정렬 할 것입니다. 지금은이 예제가 작동하며 코드에서 작동하는 버전입니다.
여기
서비스 목록 (magnet.service.ts) : 여기
import { Injectable } from '@angular/core';
import {
AngularFireDatabase,
AngularFireObject,
AngularFireList
} from 'angularfire2/database';
import { Observable } from 'rxjs/Observable';
import { Magnet } from '../models/Magnet';
import { AuthService } from '../services/auth.service';
import * as firebase from 'firebase/app';
@Injectable()
export class MagnetService {
magnetsRef: AngularFireList<Magnet>;
magnets: Observable<any>;
magnet: AngularFireObject<Magnet>;
userID: string;
constructor(public af: AngularFireDatabase,
private authService: AuthService)
{
}
getMagnets(userID: string) {
this.magnetsRef = this.af.list<Magnet>(userID + '/magnets');
//use snapshotChanges().map() to store the key
this.magnets = this.magnetsRef.snapshotChanges().map(changes => {
return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});
return this.magnets;
}
newMagnet(magnet: Magnet) {
this.magnetsRef.push(magnet);
}
getMagnet(userID:string, key: string) {
this.magnet = this.af.object(userID + '/magnets/' + key);
console.log("Selected the following magnet: ");
console.log(this.magnet);
return this.magnet;
}
updateMagnet(key:string, magnet: Magnet) {
this.magnetsRef.update(key, magnet).then(_ => console.log('update!'));
return this.magnet;
}
deleteMagnet(key: string) {
this.magnetsRef.remove(key).then(_ => console.log('item deleted!'));
}
}
구성 요소가 여기 LISTING (magnet.component.ts)
import { Component, OnInit } from '@angular/core';
import { AngularFireDatabase } from 'angularfire2/database';
import { MagnetService } from '../../services/magnet.service';
import { Magnet } from '../../models/Magnet';
import { Observable } from 'rxjs/Observable';
import * as firebase from 'firebase/app';
import { AuthService } from '../../services/auth.service';
import { AsyncPipe } from '@angular/common';
@Component({
selector: 'app-magnets',
templateUrl: './magnets.component.html',
styleUrls: ['./magnets.component.scss']
})
export class MagnetsComponent implements OnInit {
items: Observable<any>;
//this works
//items: Magnet[];
user: firebase.User;
constructor(
public magnetService: MagnetService,
private authService: AuthService
) {
}
ngOnInit() {
this.authService.afAuth.authState.subscribe(user => {
this.user = user;
this.magnetService.getMagnets(user.uid).subscribe(items => {
this.items = items;
})
})
}
}
COMPONENT의 HTML (magnets.component.ts)
<app-header></app-header>
<div class="container">
<div class="row mt-5 pt-5">
<div class="col text-center">
<h1>Magnets</h1>
</div>
</div>
<div id="" class="row">
<div id="" class="col">
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>HeadlineA</th>
<th>HeadlineB</th>
<th>SubheadLineA</th>
<th>SubheadLineB</th>
<th>LeadA</th>
<th>LeadB</th>
<th>Options</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of items">
<td>{{ item.key }}</td>
<td>{{ item.HeadlineA }}</td>
<td>{{ item.HeadlineB }}</td>
<td>{{ item.SubheadLineA }}</td>
<td>{{ item.SubheadLineB }}</td>
<td>{{ item.LeadA }}</td>
<td>{{ item.LeadA }}</td>
<td>{{ item.key }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<app-footer></app-footer>
도움이 되었기를 바랍니다.