【问题标题】:How to produce data after getting firebase firestore in Vue.JS在 Vue.JS 中获取 firebase firestore 后如何生成数据
【发布时间】:2020-06-14 09:31:56
【问题描述】:

我想将我从 firebase 获得的所有订单数据显示到我的浏览器控制台。请看下图

这是在 cue.js 中编写如下代码后从 firebase 获取的数据

orders(){
    const db = firebase.firestore();
    const dbOrderRef = db.collection('order');
    dbOrderRef.get()
        .then(res => {
            res.forEach(doc => {
                console.log(doc.data())
            })
        })
        .catch(err => {
            console.log('error', err)
        })
}

我试着喜欢下面这个

data中的实例变量

ordersData = []

然后在方法中

this.ordersData = doc.data()

但没有运气。

我现在可以做些什么来实现我的目标?

谢谢

【问题讨论】:

  • 请尝试添加一个可以工作的 codepen /code 沙箱示例!!
  • 您可以将您从 firebase 获得的 doc.data() 存储为一个数组分配给数据变量,并且在 UI 显示中您可以使用 v-for

标签: javascript firebase vue.js nuxt.js


【解决方案1】:

如果我正确理解您的问题,您希望将从 Firestore 查询收到的所有订单分配给 ordersData 数组。

以下应该可以解决问题:

const db = firebase.firestore();
const dbOrderRef = db.collection('order');

let orderArray = [];
dbOrderRef.get()
    .then(res => {
        res.forEach(doc => {
            let orderObj = doc.data();
            orderObj.id = doc.id;
            orderArray.push(orderObj);
        });
        this.ordersData = orderArray;
    })
    .catch(err => {
        console.log('error', err)
    })

然后你可以在你的模板中显示ordersData数组如下,例如:

            <div v-if="ordersData.length">
                <div v-for="order in ordersData">
                    <h5>{{ order.name }}</h5>
                    <p>Price: {{ order.price }}</p>
                    <p>
                     <a @click="openOrderDetail(order.id)">Open order</a>  
                     // Here we show how we can call an openOrderDetail() method passing the Firestore document id of the order.
                     // This would allow, for example to route to a page where you use the order id to query for the order document.
                    </p>
                </div>
            </div>

【讨论】:

    【解决方案2】:

    在使用 then 时,在 then 块中使用的这个关键字指的是块本身,而不是 Vue 对象。下面的解决方案应该作为 orders 函数,我们将 Vue 引用保存在另一个变量中,并使用这个变量来访问 ordersData。

    let _this = this
    const db = firebase.firestore();
    const dbOrderRef = db.collection('order');
    dbOrderRef.get()
        .then(res => {
            res.forEach(doc => {
                _this.ordersData = doc.data();
                console.log(_this.ordersData)
            })
        })
        .catch(err => {
            console.log('error', err)
        })
    

    【讨论】:

    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2018-11-06
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多