2017-01-18 9 views
4

クエリされたリストで「child_added」イベントを使用できるかどうかは疑問です。これと同じように:Firebase Angularfire2 - クエリされたリストをリッスンする子が追加されました

this.curUserPosts = this.af.database.list('/posts', { 
    query: { 
     orderByChild: 'user/id', 
     equalTo: id 
    } 
    }).$ref.on("child_added", (child) => { 
    console.log(child); 
    }); 

私はここで、以下に興味がある: それがすべてで動作します。追加された子がクエリに対応する場合にのみ適切に起動しますか?それがどのように優れているか。

また、ファイアベースでこのような照会リストを処理するための好ましい方法は何ですか?

答えて

3

いいえ、動作しません。クエリが適用されません。

FirebaseListObservableref$プロパティは、クエリが設定された参照ではありません。あなたは(コンストラクタのrefパラメータが$refプロパティに割り当てられます)source codeでこれを見ることができます:

return new FirebaseListObservable(ref, subscriber => { 
    ... 
    let queried: firebase.database.Query = ref; 
    if (query.orderByChild) { 
    queried = queried.orderByChild(query.orderByChild); 
    } else if (query.orderByKey) { 
    queried = queried.orderByKey(); 
    } else if (query.orderByPriority) { 
    queried = queried.orderByPriority(); 
    } else if (query.orderByValue) { 
    queried = queried.orderByValue(); 
    } 

あなたはchild_addedを自分で使用したい場合は、あなたがあなた自身のクエリを構成することができます。

、あなたのコードでは、 $refonを呼び出すことによって、あなたの this.curUserPostsプロパティはobservabl以外のものを割り当てられます
this.curUserPosts = this.af.database.list('/posts', { 
    query: { 
    orderByChild: 'user/id', 
    equalTo: id 
    } 
}); 
this.curUserPosts.$ref 
    .orderByChild('user/id') 
    .equalTo(id) 
    .on("child_added", (child) => { 
    console.log(child); 
    }); 

注意e;渡されたリスナーがonに割り当てられます。

-1

はい、これはリストのすべての初期項目で有効です。

すべての初期項目に対してchild_addedが呼び出されると、その後に追加されるすべての項目に対して、child_addedが呼び出されますが、それ以上ソートされません。

関連する問題