Vue:检索 Firestore 数据以显示用户的企业名称 v-for 循环

Posted

技术标签:

【中文标题】Vue:检索 Firestore 数据以显示用户的企业名称 v-for 循环【英文标题】:Vue: Retrieve firestore data to show user's business name v-for loop 【发布时间】:2021-01-22 09:29:12 【问题描述】:

在我的项目中,我正在处理电子商务的结果页面。

我想从两个集合中检索数据。 一个叫做“Product”,另一个叫做“ProUser”。

现在,我可以从“产品”集合中检索并显示产品信息。 我使用 v-for 循环来显示每个项目的信息。

我还想同时检索每个用户的“ProUser”集合中的商店名称。 我在“业务”字段中设置了商店名称。

产品集合对应uid。

在我的开发控制台中,我可以确认我可以从“ProUser”集合中检索所有数据。

以下是我的 vue.js 代码。

现在在我的浏览器中,我无法显示每个用户的商店名称。

<template>
    <div class="main">
      <section class="cards">
        <div class="card-list" v-for="(item, index) in getMenuItems" :key="index">
          <div class="card" >
          <div class="product-list" v-if="item.quantity > 0">
            <div class="quantity">
                <span> item.quantity </span>
            </div>
            <div class="card__image-container" v-for="(sample, index) in item.sample" :key="index">
              <router-link to="/product">
              <img
                :src="sample"
                
                class="image"
              />
              </router-link>
              <!-- Retrieve business name from the ProUser collection. -->
              <div class="card__content"  v-for="(item, index) in ProUsers" :key="index">
                  <div class="card__info">
                      <span class="text--medium"> item.business </span>
                      <span class="card__distance text--medium"> product.quantity -- orders </span>
                  </div>
              </div>
            </div>
          <div class="icons">
            <div class="time">
              <span> item.limitObject </span>
             </div>
              <div class="fav">
              <span>Heart</span>
             </div>
              <div class="price">
              <span> item.sale </span>
             </div>
          </div>
          </div>
        </div>
        </div>

      </section>
    </div>
    </div>
    </div>
    
</template>

<script>
import axios from 'axios';
import fireApp from '@/plugins/firebase'
const firebase = require("firebase");
require("firebase/firestore");
const db = firebase.firestore();
import googleMapMixin from '@/mixins/googleMapMixin'
import  mapGetters  from 'vuex'


    export default 
        name: "UserLocation",
        data() 
            return 
                address: "",
                error: "",
                spinner: false,
                ProUsers: []
            
        ,
        mixins: [googleMapMixin],
        created() 
          //vuexfire
          const dbMenuRef = db.collection('Product')
          this.$store.dispatch('setMenuRef', dbMenuRef)

          //firestore
          db.collection("ProUser")
          .get()
          .then((querySnapshot)=> 
              querySnapshot.forEach((doc) => 
                  console.log(doc.id, " => ", doc.data());
                  this.ProUsers.push(doc.data())
              );
          )
          .catch((error) => 
              console.log("Error getting documents: ", error);
          );
        ,        
        computed: 
            ...mapGetters([
                'getMenuItems'
            ])
        ,
        methods: 
          
        
    
</script>

现在的问题是,我可以在

<div class=" card__content v-for="(item, index) in ProUsers" :key="index" item.business product.quantity orders>

不显示所有店铺名称。

我的问题是,换句话说,我想获取产品和产品所有者。 现在在一个标签中,我可以在“ProUser”集合中显示所有产品所有者的一个产品。

希望有人帮助我。

如果您需要更多信息,请随时询问。

【问题讨论】:

prouser 只有 1 个业务字段权限,因此它只会为每个用户呈现 1 个。 我的问题是,换句话说,我想获取产品和产品所有者。现在我可以向“ProUser”集合中的所有产品所有者展示一个产品。 您要获取与 prouser 相关的产品,对吗? @NaveenKashyap 我想展示与产品相关的专业用户。所以是的。 您可以做的是在获取数据后,您可以将 id 添加到对象的新数据数组中,并且 v-for 您可以将 pouser id 与产品 id 匹配,并显示它是否匹配或合并两者获取数据时 prouser 和产品具有相同的 id 【参考方案1】:

这是您如何从 prouser 集合中获取数据用户,然后获取与 prouser 相关的产品并从两个集合数据中的数据创建新对象的方法。

  let data = [];
  let db = firebase.firestore();
  db.collection("ProUser")
    .get()
    .then((userSnapshot) => 
      db.collection("Product")
        .get()
        .then((productSnapshot) => 
          userSnapshot.forEach((user) => 
            productSnapshot.forEach((product) => 
              if (user.id === product.id) 
                data.push(
                  uid: user.id,
                  pId: product.id,
                  ...user.data(),
                  ...product.data(),
                );
              
            );
          );
        )
        .catch((e) => 
          console.log(e);
        );
    )
    .catch((e) => 
      console.log(e);
    );

【讨论】:

如果你想获取所有的 remove doc() 方法,你会收到一个快照并遍历快照,并做同样的检查用户 ID 和产品 ID,如果匹配推送新对象到数组中跨度> 谢谢,您的代码对我来说很有意义。但仍然会显示所有商家名称。 所有企业名称都显示什么?你能提供图片吗? 我想在产品图片下方显示一个对应的商家名称。但是现在,我在产品图片下方的“ProUser”集合中看到了所有企业名称。我想解决这个问题。 我想在 Firestore 中实现一对一的关系。

以上是关于Vue:检索 Firestore 数据以显示用户的企业名称 v-for 循环的主要内容,如果未能解决你的问题,请参考以下文章

Vue、Vuex 和 Firestore:如何在前端显示检索到的 Firestore 数据并使其具有响应性?

如何限制用户仅从 Cloud Firestore 检索他们的数据?

Firestore如何在回收站视图中从firestore检索数据

如何使用 Flutter 中的 UserID 从 Firebase Firestore 检索数据?

我想从firestore检索当前记录的用户数据,但这显示错误[重复]

我可以通过哪些方法正确地在 Firebase Firestore 中的数据结构来建模多对多关系以检索 vue js 中的特定 uid