tutorial instalar firestore angularfiremodule angular firebase firebase-database angularfire2

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'' });