Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Vuex和Firebase在管理视图中显示项目_Firebase_Vue.js_Vuex - Fatal编程技术网

如何使用Vuex和Firebase在管理视图中显示项目

如何使用Vuex和Firebase在管理视图中显示项目,firebase,vue.js,vuex,Firebase,Vue.js,Vuex,我正在创建电子商店,我想存储我的可用产品,并能够从我的管理视图中编辑/删除它们。然而,当Im登录到管理视图时,它只是不显示任何可用的产品 这是我的VueX: import Vue from 'vue' import Vuex from 'vuex' import { dbMenuAdd } from '../../firebase'; import firebase from 'firebase' import 'firebase/firestore' Vue.use(Vuex) expor

我正在创建电子商店,我想存储我的可用产品,并能够从我的管理视图中编辑/删除它们。然而,当Im登录到管理视图时,它只是不显示任何可用的产品

这是我的VueX:

import Vue from 'vue'
import Vuex from 'vuex'
import { dbMenuAdd } from '../../firebase';
import firebase from 'firebase'
import 'firebase/firestore'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    cart: [],
    avaibleProducts: [],
    currentUser: null
  },
  getters: {
    countOfCartProducts: state => {
      return state.cart.length
    },
    myCart: state => {
      return state.cart
    },
    getTotal: state => {
      return state.cart.reduce((total, lineItem) => Number(total) + Number(lineItem.price), 0);
    },
    currentUser: state => {
      return state.currentUser
    },
    getAvaibleProducts: state => {
      return state.avaibleProducts
    }
  },
  mutations: {
    ADD_TO_CART: (state, product) => {
      if (state.cart.findIndex(item => item.id === product.id) !== -1) {
        return
      }
      else {
        state.cart.push(product)
      }
    },
    REMOVE_FROM_CART: (state, product) => {
      state.cart.splice(product, 1)
    },
    userStatus(state, user) {
      if (user) {
        state.currentUser = user
      } else {
        state.currentUser = null
      }
    },
    setAvaibleProducts: state => {
      let avaibleProducts = []

      dbMenuAdd.onSnapshot((snapshotItems) => {
        avaibleProducts = []
        snapshotItems.forEach((doc) => {
          var avaibleItemData = doc.data();
          avaibleProducts.push({
            ...avaibleItemData,
            id: doc.id
          })
        })
      })
      state.avaibleProducts = avaibleProducts
    },
  },
  actions: {
    setUser(context, user) {
      context.commit('userStatus', user)
    },
    setAvaibleProducts: context => {
      context.commit('setAvaibleProducts')
    }
  },
  modules: {
  }
});
这是我的Admin.vue:

<template>
  <div>
    <main>
      <br />
      <br />
      <br />
      <br />
      <br />
      <div class="btn-container">
        <router-link to="/addNew">
          <button class="add-to-cart">
            ADD NEW ITEM
          </button></router-link
        >
      </div>
      <div class="wrap">
        <div id="avaible">
          <div
            class="p-avaible"
            v-for="item in avaibleProducts"
            :key="item.name"
          >
            <router-link
              @click.native="scrollToTop"
              :to="{ name: 'Product', params: { ...item } }"
            >
              <img :key="item.image" :src="item.image" />
            </router-link>
            <div class="p-name">{{ item.name }}</div>
            <div class="p-price">€{{ item.price }}</div>
            <div class="btn-container">
              <button class="remove" @click="deleteProduct(item.id)">
                REMOVE
              </button>
            </div>
          </div>
        </div>
      </div>
    </main>
  </div>
</template>

<script>
import { mapMutations } from "vuex";
import { dbMenuAdd } from "../../firebase";

export default {
  methods: {
    ...mapMutations(["ADD_TO_CART"]),
    addToCart(item) {
      this.ADD_TO_CART(item);
    },
    deleteProduct(id) {
      dbMenuAdd
        .doc(id)
        .delete()
        .then(function() {
          console.log("Document sucessfully deleted!");
        })
        .catch(function(error) {
          console.error("Error removing document: ", error);
        });
    },
  },
  data() {
    return {
      cart: [],
      computed: {
        showProduct() {
          const id = this.$route.params.id;
          const product = this.avaibleProducts.find((p) => p.uuid == id);
          return product;
        },
        avaibleProducts() {
          return this.$store.getters.getAvaibleProducts;
        },
      },
    };
  },
  beforeCreate() {
    return this.$store.dispatch("setAvaibleProducts");
  },
};
</script>

<style type="scss" scoped>
.edit {
  color: white;
  background-color: darkorange;
  border: 1px solid white;
  padding: 2em;
  margin: 2em;
  font-weight: bold;
}

.remove {
  color: white;
  background-color: crimson;
  border: 1px solid white;
  margin: 2em;
  padding: 2em;
  font-weight: bold;
}
</style>






添加新项目 {{item.name} 欧元{{item.price} 去除 从“vuex”导入{mapstations}; 从“../../firebase”导入{dbMenuAdd}”; 导出默认值{ 方法:{ …映射突变([“添加到购物车]), addToCart(项目){ 此。将\添加到\购物车(项目); }, 删除产品(id){ dbMenuAdd .doc(id) 1.删除() .然后(函数(){ log(“文档成功删除!”); }) .catch(函数(错误){ console.error(“删除文档时出错:”,错误); }); }, }, 数据(){ 返回{ 购物车:[], 计算:{ showProduct(){ const id=this.$route.params.id; const product=this.availableproducts.find((p)=>p.uuid==id); 退货产品; }, 可用产品(){ 返回此。$store.getters.getAvailableProducts; }, }, }; }, beforeCreate(){ 返回此。$store.dispatch(“SetAvailableProducts”); }, }; .编辑{ 颜色:白色; 背景色:达克朗格; 边框:1px纯白; 填料:2米; 边缘:2米; 字体大小:粗体; } .移除{ 颜色:白色; 背景颜色:深红色; 边框:1px纯白; 边缘:2米; 填料:2米; 字体大小:粗体; }
有人知道为什么不展示产品吗? 我是不是打错电话了?
请帮忙。谢谢

您可以调试以查看产品是否在商店中吗?另外,您如何声明它的工作状态。它向我展示了Vue调试器中的AvailableProducts数组,但是它是空的。你说的“但是它是空的”到底是什么意思?
AvailableProducts
阵列在商店(vuex)中是否为空?或者在组件中为空?是,在登录并转到管理员页面后,我在其中删除和添加项目。在Admin.vue中循环的数组中不存在数据库中现有的。