2017-01-08 3 views
0

私は、anglefire2の目的は、あなたのアプリとfirebaseの観測可能な前後の流体の前後の同期であることを知っています。私はその機能を私のアプリ全体に使用していますが、ある点では、データを変更しない固定コピーとして取得する必要があります。ときfirefbase2からstaticfinderを取得します。

と仮定すると、データベースは、それは例えば、その正確な瞬間でありませんように容易itemsを得るためにすべての可能な方法があり、上記の例では、言い換えれば、この

// firebase is something like: 
// { items: { 
//  item1: { ... }, 
//  item2: { ... }, 
//  item3: { ... } 
// } 
// } 

myList$: FirebaseListObservable<any[]>; 
myList: any[]; 
this.myList$ = this.af.database.list('/items'); 
this.myList$.subscribe(questions => { 
    this.myList = questions; // can this.myList ever be frozen? 
}); 

のように見え、更新/ item4が表示されたら?

+0

あなたはそれを文字列として格納することができ、使用する必要があるときにJSONに再度解析します。それはあなたのために働くだろうか? – echonax

答えて

0

import 'rxjs/add/operator/first'; 

myList$: Observable<any[]>; 
myList: any[]; 

this.myList$ = this.af.database.list('/items').first(); 
this.myList$.subscribe(questions => { this.myList = questions; }); 

そして、それが完了すると、退会する必要はありません:あなたはfirst演算子を使用して、それを構成する場合は、それ以上の変更が通知されないように、観測可能で、最初の値を発する時に完了します

あなたのコメントの質問に関しては、最初の呼び出しが機能する理由はありません。後続の呼び出しは空の配列を返します。唯一の説明は、後続の場所にデータが含まれていないことです。

また、あなたの関数と、それは約束を返すために、より理にかなって - ではなく(とプロパティが変更されたときを示すためのメカニズムで)オブジェクトのプロパティをサブスクライブし、操作する:

import 'rxjs/add/operator/first'; 
import 'rxjs/add/operator/toPromise'; 

myFunc(location: string): Promise<any[]> { 
    return this.af.database 
     .list('/items/' + location) 
     .first() 
     .toPromise(); 
} 
+0

私はこの解決策が好きです。私はこれを関数に入れて場所を変更すると問題にぶつかります。 http://pastebin.com/reu78FgJ最初のコールは正しいものですが、その後のすべてのコールには 'questions =>'の空の[]が付きます。それはどういう意味ですか? – MarshallMcL

+0

答えを更新しました。 – cartant

関連する問題