2017-06-27 6 views
0

今、私はデータdescribed in the documentationを使用してデータのラップを解除しています。AngularFire2データスナップショットの取得

AngularFire2がデフォルトでFirebase DataSnapshotをアンラップしますが、preserveSnapshotオプションを指定することにより、元のスナップショットなどのデータを取得することができます。ただし、ドキュメントは述べています。

データスナップショットを手動でアンラップしなくても、「デフォルト」アンラッピング機能(itemの要素にアクセスしてください)にアクセスするにはどうすればよいですか?

Firebaseから私のデータは次のようになります。(作品)

{ 
    testObj : { 
    firstName: "beckah", 
    lastName: "s" 
    } 
} 

私のコードです:

Object {firstName: "beckah", lastName: "s"} 

どのように行うことができるだろうが出力さ

import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { AngularFireDatabase, FirebaseObjectObservable } from 'angularfire2/database'; 

@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html' 
}) 
export class HomePage { 
    item: FirebaseObjectObservable<any>; 
    constructor(public navCtrl: NavController, 
       public db: AngularFireDatabase) { 
    this.item = db.object('/testObj', { preserveSnapshot: true }); 
    this.item.subscribe(snapshot => { 
     console.log(snapshot.val()) 
    }); 
    } 
} 

まったく同じもの(console.log my itemオブジェクト)のように私のスナップショットを手動でアンラップせずにドキュメントの状態は可能ですか?

this.item.get("firstName")の方法はありますか?

答えて

5

AngularFireでは、スナップショットについてまったく心配する必要はありません。 AngularObjectObservableを購読するだけで、オブジェクトがフィードされます。

angularfire2バージョン4

this.item$ = this.db.object('/item').subscribe(item => console.log(item)); 

angularfire2バージョン5

this.item$ = this.db.object<Item>('/item').valueChanges().subscribe(item => console.log(item)); 

あなたはコンストラクタで購読するべきではありません。購読する:onNgInit次に、メモリリークを避けるために、onNgDestroyの登録を解除してください。

多くの場合、あなたは、すべてのサブスクライブする必要はありません - asyncパイプを使用して、角度がテンプレートにそれをやらせる:

angularfire2バージョン4

// component 
public item$: FirebaseObjectObservable<Item>; 

ngOnInit() { 
    this.item$ = this.db.object('/item'); 
} 

// template 
<div *ngIf="item$ | async as item"> 
    First name is {{item?.firstName}}. 
</div> 

angularfire2バージョン5

// component 
public item$: Observable<Item>; 

ngOnInit() { 
    this.item$ = this.db.object<Item>('/item').valueChanges(); 
} 

// template 
<div *ngIf="item$ | async as item"> 
    First name is {{ item?.firstName }} 
</div> 
+0

「AngularObjectObservable」を参照すると、 'rxjs/Observable'を意味しますか? – beckah

+0

申し訳ありませんが、 'Observable'のサブクラスである' FirebaseObjectObservable'を意味しました。 –

+0

問題ありません:)その場合でも、私はあなたが結果を購読して同時に割り当てをすることはできないと思います。 'タイプ 'サブスクリプション'がタイプ 'FirebaseObjectObservable 'に割り当てられないというエラーが表示されます。しかし、console.logsという2番目の引数に無名関数をポップして代入を行うことができます。それにかかわらず、これはテンプレートを非同期的に聞く方法を大いに助けました。 – beckah

関連する問題