【问题标题】:Extract data from FirebaseListObservable to Array从 FirebaseListObservable 中提取数据到数组
【发布时间】:2017-05-09 20:25:40
【问题描述】:

对不起我的英语,我有这个可观察的:

this.productos = af.database.list('/productos', {
    query: {
      orderByChild: 'categoria',
      equalTo: this.catnombre
    }
    });

我需要从这里提取所有 id 并设置在一个数组中,但我不知道如何,谢谢。

编辑:

我可以提取id但我使用de key,现在我需要提取其他数据,但是snapshot.val,不起作用。

  this.productos = af.database.list('/productos/', {
    query: {
      orderByChild: 'categoria',
      equalTo: this.catnombre
    }, preserveSnapshot:true
    });

    this.productos.subscribe(snapshot => {

         snapshot.forEach(snapshot => {

           console.log(snapshot.key);
           this.idproductos.push(snapshot.key); 

         });
         console.log(this.idproductos);
    });

【问题讨论】:

    标签: firebase ionic-framework firebase-realtime-database ionic2 angularfire2


    【解决方案1】:

    你需要做的就是

    this.productos = af.database.list('/productos/', {
        query: {
          orderByChild: 'categoria',
          equalTo: this.catnombre
        })
      .map(products => products.map(product => product.$key));
    

    结果将是一个可观察的键数组。现在你可以订阅它或做任何你想做的事情。

    this.productos.subscribe(keys => console.log("keys are", keys));
    

    如果正确使用 AngularFire 和 FirebaseListObservable 之类的东西,您无需担心快照,或获取它们的 val(),或对它们执行 forEach,或获取元素并将它们放到您的自己的数组。 FirebaseListObservable 是一个可观察的数组。只需map 它来创建其他可观察对象,就像我们在上面创建键数组的可观察对象或订阅它以获取基础数据一样。

    【讨论】:

    • 问题是我需要这个数组用于其他功能,我不知道如何读取 observable。
    • 我建议阅读或重新阅读有关 observables 的好教程。您可以通过订阅它来“读取一个 observable”,然后对传递给 subscribe 的处理程序中的数据执行您想要执行的操作。您可以在订阅处理程序中做的一件事是将数据的副本存储在某处,这很好,只要您记住在可观察对象开始触发之前数据将不可用 - 在 AngularFire 的情况下,直到数据已检索。
    • 嗯好的,我明白了,我会努力的,非常感谢。
    猜你喜欢
    • 2016-03-11
    • 2014-11-05
    • 1970-01-01
    • 2017-06-27
    • 2020-10-18
    • 2014-07-05
    • 2012-10-24
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多