instalar - Angularfire2/Firebase-consulta con la lista de anglefire2 suscribirse en tiempo de ejecuciĆ³n no funciona
firebase angular 6 (1)
Estoy trabajando en un proyecto con angular2 / firebase y usando el módulo angularfire2. Quiero algunos datos en tiempo real, así que uso la lista de angularfire2 y del lado de los componentes, suscribiéndome sobre la lista. En el escenario en tiempo real, si cualquier nuevo elemento agregado en la base de datos de firebase se suscribe, pero sin ninguna consulta. ¿Cómo puedo archivar suscripción con consulta? Estoy usando el siguiente código donde la consulta es una selección sobre qué base quiero datos.
getRealtimeData(query: any){
if(query){
return this.af.database.list(databaseName+"/messages", {
query: {
orderByChild: ''is_broadcast'',
equalTo: query.value
}
});
} else {
return this.af.database.list(databaseName+"/messages", {
query: {
orderByChild: ''timestamp''
}
});
}
}
Estoy llamando esto en mi componente creando una consulta
var query;
if (this.isBroadcastMessage && this.isGroupChatMessage || !this.isBroadcastMessage && !this.isGroupChatMessage) {
query = null;
} else if (this.isBroadcastMessage && !this.isGroupChatMessage) {
query = {
value: true
};
} else if (!this.isBroadcastMessage && this.isGroupChatMessage) {
query = {
value: false
};
}
this.firebaseService.getRealtimeData(query).subscribe((data: any) => {
console.log("data::", data);
}, (error: any) => {
console.log("error::", error);
})
Usuario ReplaySubject
query$: ReplaySubject<any> = new ReplaySubject(1);
Primero, crea tu función getRealtimeData
esta manera
// you no need to pass any argument here
getRealtimeData():FirebaseListObservable<any>{
return this.af.database.list(databaseName+"/messages", {
query: this.query$
});
entonces
public updateQuery(query: string): void {
this.query$.next(query);
}
Ahora
this.firebaseService.getRealtimeData().subscribe((data: any) => {
console.log("data::", data);
}, (error: any) => {
console.log("error::", error);
})
se llamará a la función de subscribe
cuando llame
this.firebaseService.updateQuery({
orderByChild: ''is_broadcast'',
equalTo: true // false
});
// or
this.firebaseService.updateQuery({
orderByChild: ''timestamp''
});