2016-10-18 13 views
0

スタートアップ時にすべてのcontactListをロードするリスニングレスポンスアプリと、追加される新しいコンタクトリストを聴くことができます。以下のコードでは、起動時にreceiveContactListreceiveContactの両方が呼び出されます。起動時に前者を呼び出させ、後で新しい連絡先が追加されたときに後者を呼び出す方法はありますか? docs(強調鉱山)からデータベースからのFirebaseスタートアップの読み込みと新しい追加のための読み込み

contactsRef.once('value', function(snapshot) { 
    store.dispatch(receiveContactList(snapshot.val())) 
}) 

contactsRef.on('child_added', function(snapshot) { 
    store.dispatch(receiveContact(snapshot.val())) 
}) 

答えて

0

をchild_added:アイテムのリストを取得するか、項目のリストへの追加を聞きます。このイベントは、既存の各子のに対して1回ずつがトリガーされ、新しい子が指定されたパスに追加されるたびに再度トリガーされます。リスナーには、新しい子のデータを含むスナップショットが渡されます。

私は何か別のものをお勧めします:最初のステートメントを落として、このイベントを起動時にリストに記入させてください。全体的なコードが少なくて済みます。

+0

このイベントは各子供に対して1回発生するため、最初のステートメントで1回ではなく、複数の子供に対して何回も繰り返すことが繰り返されます – stackjlei

1

初期データと新しいデータの処理を分割する一般的な方法は、boolean型と状態のタックを維持することです:

var isInitialDataLoaded = false; 
contactsRef.once('value', function(snapshot) { 
    store.dispatch(receiveContactList(snapshot.val())) 
    isInitialDataLoaded = true; 
}) 

contactsRef.on('child_added', function(snapshot) { 
    if (isInitialDataLoaded) { 
    store.dispatch(receiveContact(snapshot.val())) 
    } 
}) 

これは動作しますが、初期データのためのchild_addedイベントが火災に保証されているので、対応するvalueイベントの前。

関連する問題