google-cloud-firestore - 我无法在组件模板中显示 vuex 状态值
问题描述
我正在使用可组合函数从 Firestore 中获取文档。我已导入返回到 Vuex 商店的对象。当我在我的组件中访问该 firestore 对象时,我意识到它被包裹在 a 中ComputedRefImpI{ }
,并且我无法在模板标签中显示值。
这是我的商店/index.js
import { createStore } from 'vuex'
import getCollection from '../composables/getCollection'
function UpdateLocalStorage(cart){
localStorage.setItem('cart', JSON.stringify(cart))
}
export const store = createStore({
state: {
cart: [],
all: [],
error: null
},
getters: {
cartProducts (state) {
return state.cart
}
},
mutations: {
productQuantityInCart (state, product) {
const item = state.cart.find(i => i.id === product.id)
if(item) return item.quantity
else return null
},
addToCart (state, product) {
let item = state.all.find(i => i.id === product.id)
if(item) {
item.quantity++
} else {
state.cart.push({...product, quantity:1})
}
UpdateLocalStorage(state.cart)
},
setAllOffersFromDB (state) {
const { documents, error } = getCollection('allOffers')
if(!documents) {
state.error = error
} else {
state.all = documents
}
},
removeFromCart (state, payload) {
let product = payload
let item = state.cart.find(i => i.id === product.id)
if(item.quantity > 1) {
return null
} else {
state.cart.filter(i => i.id !== product.id)
}
UpdateLocalStorage(state.cart)
},
cartTotal (state) {
let total = 0
state.cart.forEach(i => {
total += i.quantity * i.price
})
return total
},
updateCartFromLocalStorage (state) {
const cart = localStorage.getItem('cart')
if(cart) {
state.cart = JSON.parse(cart)
}
}
},
actions: {
productQuantity (context, product) {
context.commit('productQuantityInCart', product)
}
}
})
这是Cart.vue
<template>
{{ cartProdcts }} // displays all values as shown in the picture attached
<div v-for="product in cartProducts" :key="product.id">
{{ product.title }} // this value is blank inside browser
{{ product.subtitle }} // this value is blank inside browser
{{ product.price }} // this value is blank inside browser
</div>
</template>
<script>
import { computed, ref } from 'vue'
import {useStore} from 'vuex'
export default {
setup() {
const store = useStore()
const cartProducts = computed(() => store.getters.cartProducts)
return { cartProducts}
}
}
当我控制台记录 Cart.vue 中的 getter.cartProducts 时,正确的值显示如附图所示,但我无法在模板标签中显示值
解决方案
setup 方法已经返回模板变量,可以在模板中使用,不需要在计算中添加,vuex 是数据流的一种方式。您可以从 store 中获取值暴露给模板。不使用计算此修复问题
<script>
import { computed, ref } from 'vue'
import {useStore} from 'vuex'
export default {
setup() {
const store = useStore()
const cartProducts = store.getters.cartProducts; // no need to use compute
return { cartProducts}
}
}
</script>
推荐阅读
- python - python和C#之间ML模型的互操作性
- javascript - 接收数据后刷新表
- c++ - 检测使用了哪个键盘
- r - 从 R 中的开始/结束时间戳计算每小时间隔
- c# - Rider NUnit 测试问题:程序不包含 main
- java - 响应休息分页请求的正确方法
- node.js - 无法加载默认凭据。Firebase 和 Express 错误
- json - JSON Schema 必填字段取决于其他字段值
- linux - 是否有 Unix Expect Binary / Utility 等效于 Windows Batch 或 Powershell 用于交互式脚本?
- kubernetes - 在 k8s on prem 上访问服务