Ionic3 - Angularfire2 возвращает объект запроса вместо списка при доступе к базе данных [duplicate]

Вы также можете использовать метод compareTo() для сравнения двух строк. Если результат compareTo равен 0, то две строки равны, в противном случае сравниваемые строки не равны.

== сравнивает ссылки и не сравнивает фактические строки. Если вы создали каждую строку, используя new String(somestring).intern(), вы можете использовать оператор == для сравнения двух строк, в противном случае могут использоваться только методы equals () или compareTo.

4
задан jegadeesh 1 November 2017 в 06:04
поделиться

3 ответа

AngularFire2 V5

this.afd.list('/shoppingItems/') не возвращает асинхронный наблюдаемый, который должен работать с трубой async. Он возвращает ссылку на список в базе данных реального времени. Вы должны использовать valueChanges(), чтобы вернуть это.

В вашем провайдере верните наблюдаемый,

 getShoppingItems() {

    console.log("Shopping items"+this.afd.list('/shoppingItems/'))
    return this.afd.list('/shoppingItems/').valueChanges();//here
  }

Если вы просматриваете $key/$value , Проверьте подробности обновления для angularfire2 v4 до 5 . Это связано с тем, что FirebaseList устарел и AngularFireList теперь возвращается из версии 5.

Вызов .valueChanges () возвращает Observable без каких-либо метаданных. Если вы уже сохраняете ключ как свойство, тогда вы в порядке. Однако, если вы полагаетесь на ключ $, тогда вам нужно использовать .snapshotChanges ()

Вам нужно использовать snapshotChanges()

 getShoppingItems() {

    console.log("Shopping items"+this.afd.list('/shoppingItems/'))
    return this.afd.list('/shoppingItems/').snapshotChanges();//here
  }

Чтобы получить доступ к $key или $value в html, используйте item.payload.key и item.payload.val()

4
ответ дан Suraj Rao 15 August 2018 в 21:31
поделиться
  • 1
    это возвращаемое значение должно быть присвоено переменной типа Angularfirelist [] right ?, как это сделать на странице ts? – jegadeesh 1 November 2017 в 06:28
  • 2
    из вашего примера вы уже используете async, чтобы вы могли назначить наблюдаемый список (который вы уже делаете). Если вам нужны данные, вам придется подписаться в компоненте – Suraj Rao 1 November 2017 в 06:29
  • 3
    Спасибо за помощь! – jegadeesh 1 November 2017 в 06:37
  • 4
    рад, что сработал :) – Suraj Rao 1 November 2017 в 06:38
  • 5
    Это из версии 5 angularfire2 @ImdadAli, вы должны использовать 4.x – Suraj Rao 1 November 2017 в 16:32

Добавьте ionViewDidLoad жизненный цикл в файл home.ts и вместо конструктора загрузите свой элемент в ionViewDidLoad, замените свой конструктор на код ниже

    constructor(public navCtrl: NavController, public firebaseProvider: FirebaseProvider) {

  }

  ionViewDidLoad() {
    this.shoppingItems = this.firebaseProvider.getShoppingItems();
    console.log(this.shoppingItems);
  }
0
ответ дан Imdad Ali 15 August 2018 в 21:31
поделиться

Импорт на странице.ts

 import { Component } from '@angular/core';
 import { IonicPage, NavController, NavParams } from 'ionic-angular';
 import { AngularFireDatabase} from 'angularfire2/database';
 import { Observable } from "rxjs/Observable";
 import { ShoppingItem } from '../../model/shoppingitem';

импортирует поставщика прямо из вашего провайдера

 import { FirebaseProvider } from '../../providers/firebase/firebase';

 export class Page {

  shoppingItems:Observable<ShoppingItem[]>;

 constructor(public navCtrl: NavController, 
             public firebaseProvider: FirebaseProvider) {

                this.shoppingItems=this.firebaseProvider
                .getShoppingItem()
                .snapshotChanges()
                .map(
                  changes=>{
                    return changes.map(c=>({
                      key:c.payload.key, ...c.payload.val(),
                    }));
                  }
                );
          }
        }

     }

firebaseProvider

обратите внимание на 'shopping-list' это таблица в базе данных firebase

  private itemListRef = this.afDatabase.list<ShoppingItem>('shopping-list');

  constructor(private afDatabase: AngularFireDatabase) {}

 .getShoppingItem(){

   return this.itemListRef;

  }
 }

Ваша модель shoppingitem

 export interface ShoppingItem{
  key?:string;
  }
0
ответ дан Moses Mwicigi 15 August 2018 в 21:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: