valuechanges snapshotchanges firebaselistobservable example angularfirelist angular firebase firebase-database ionic3 angularfire2

snapshotchanges - AngularFireList no es asignable para escribir ''Observable<Response>



snapshotchanges() map (3)

Necesita usar .valueChanges() como se muestra a continuación. Aquí está el documento .

groups: AngularFireList<any>; constructor(){} getItems = (ev: any) : AngularFireList<any> { this.groups = this.afDatabase.list(''/Groups'', { query:{ orderByChild: ''namelower'', startAt: (ev.target.value), endAt: (ev.target.value + ''/uf8ff'') } } ).valueChanges(); return this.groups; }

Tengo una página Ionic que está consultando FirebaseListObservable para hacer una búsqueda dinámica en la barra de búsqueda de iones. Funciona bien con [email protected] y [email protected]. Después de actualizar la nueva versión de AngularFire 5.0 aparece un problema con FirabaseListObservable que no se ha exportado de la nueva API.

import { Component } from ''@angular/core''; import { IonicPage, NavParams, ViewController } from ''ionic-angular''; import {AngularFireDatabase, FirebaseListObservable} from ''angularfire2/database''; import { Observable} from ''rxjs''; import { Response } from ''@angular/http''; @IonicPage() @Component({ selector: ''page-modal-groups'', templateUrl: ''modal-groups.html'' }) export class ModalGroupsPage { groups: FirebaseListObservable<any>; constructor(public navParams: NavParams, public viewCtrl:ViewController, public afDatabase: AngularFireDatabase) { } getItems = (ev: any) : Observable<Response> => { this.groups = this.afDatabase.list(''/Groups'', { query:{ orderByChild: ''namelower'', startAt: (ev.target.value), endAt: (ev.target.value + ''/uf8ff'') } } ); return this.groups; } chooseGroups(item:any){ this.viewCtrl.dismiss(item); // console.log(this.product); } closeModal(){ this.viewCtrl.dismiss(); } }

<ion-header> <ion-navbar> <ion-title>Grup Seç</ion-title> <ion-buttons end> <button ion-button color="danger" (click)="closeModal()" > Kapat </button> </ion-buttons> </ion-navbar> </ion-header> <ion-content padding> <ion-searchbar (ionInput)="getItems($event)"></ion-searchbar> <ion-list> <ion-item *ngFor="let item of groups | async" (click)="chooseGroups(item)"> {{ item.name }} </ion-item> </ion-list> <!--<button ion-item *ngFor="let item of products | async" (click)="chooseProduct(item)"> {{item.name}} </button>--> </ion-content>

Luego cambié la consulta con una nueva API, pero no puedo devolver la respuesta como observable como se ve a continuación. Recibo un error como este

** mensaje: ''Tipo'' Observable []> ''no es asignable para escribir'' Observable ''. Tipo ''AngularFireAction []'' no es asignable para escribir ''Respuesta''. La propiedad ''tipo'' falta en el tipo ''AngularFireAction []''. '' **

import { Component } from ''@angular/core''; import { IonicPage, NavParams, ViewController } from ''ionic-angular''; import {AngularFireDatabase, AngularFireAction} from ''angularfire2/database''; import { Observable, BehaviorSubject} from ''rxjs''; import { Response } from ''@angular/http''; /** * Generated class for the ModalGroupsPage page. * * See http://ionicframework.com/docs/components/#navigation for more info * on Ionic pages and navigation. */ @IonicPage() @Component({ selector: ''page-modal-groups'', templateUrl: ''modal-groups.html'', }) export class ModalGroupsPage { items: Observable<AngularFireAction<firebase.database.DataSnapshot>[]>; group: BehaviorSubject<any>; constructor(public navParams: NavParams, public viewCtrl:ViewController, public afDatabase: AngularFireDatabase) { } getItems = (ev: any) : Observable<Response> => { this.group = new BehaviorSubject(ev); this.items = this.group.switchMap(name => this.afDatabase.list(''/Groups'', ref => name ? ref.orderByChild(''namelower'').startAt(ev.target.value).endAt(ev.target.value + ''/uf8ff'') : ref ).snapshotChanges()); return this.items; }


Para obtener Observable<Response> de AngularFireList desde 5.0 en adelante, use la función valueChanges() .

Verifica el cambio aquí .

return this.afDatabase.list(''/Groups'', { query:{ orderByChild: ''namelower'', startAt: (ev.target.value), endAt: (ev.target.value + ''/uf8ff'') } } ).valueChanges();

Si desea guardar una instancia de this.afDatabase.list() en this.groups , será AngularFireList lugar de FirebaseListObservable .


En Angularfire2 5.0 o superior, si necesita una lista observable con una consulta, debe utilizar AngularFireAction como se muestra a continuación.

import { Component } from ''@angular/core''; import { IonicPage, NavParams, ViewController} from ''ionic-angular''; import {AngularFireDatabase, AngularFireAction} from ''angularfire2/database''; import { Observable } from ''rxjs/Observable''; import {EmptyObservable} from ''rxjs/observable/EmptyObservable''; // import { Response } from ''@angular/http''; import * as firebase from ''firebase/app''; @IonicPage() @Component({ selector: ''page-modal-groups'', templateUrl: ''modal-groups.html'', }) export class ModalGroupsPage { groups: Observable<AngularFireAction<firebase.database.DataSnapshot>[]>; constructor(public navParams: NavParams, public viewCtrl:ViewController, public afDatabase: AngularFireDatabase) { } - getItems = (ev: any) : Observable<AngularFireAction<firebase.database.DataSnapshot>[]> => { if(!ev.data){ return this.groups = new EmptyObservable(); } this.groups = this.afDatabase.list(''/Groups'', ref => ref.orderByChild(''namelower'').startAt(ev.target.value).endAt(ev.target.value + ''/uf8ff'')).valueChanges(); // this.groups = this.groupsRef.valueChanges(); return this.groups; } chooseGroups(item:any){ // this.product.push({key:item.$key, name:item.name, price:item.price, quantity:1 }); this.viewCtrl.dismiss(item); // console.log(this.product); } closeModal(){ this.viewCtrl.dismiss(); } }