【发布时间】:2019-07-03 11:40:08
【问题描述】:
我有一个购物篮,当我从一个应用程序中选择“添加到购物篮”时,我希望购物篮能够实时重新加载。添加到购物篮时,我将此项目发布到 api。篮子从这个 api 中提取并呈现篮子组件中的数据。
我正在使用 EventBus 来告诉购物篮组件已添加了一个新项目,但是在我的 $on 函数中,$forceUpdate() 或发出另一个提取请求都不会使用新项目重新呈现组件。
这是在我的项目组件中:
methods: {
submit(e){
e.preventDefault()
let data = this.createBasketObject(this.experience)
fetch('http://localhost:3000/api/basket', {
method: 'POST',
body: JSON.stringify(data),
headers: { 'Content-Type': 'application/json'}
})
.then( eventBus.$emit('basket-updated', true))
}
这是在我的购物篮组件中:
<template lang="html">
<div class="">
<h3>Basket</h3>
<basket-item
v-for="item in items"
:key="item._id"
:item="item"
/>
<p>Total: £{{ total}}</p>
</div>
<script>
import BasketItem from './BasketItem.vue';
import { eventBus } from '../main.js';
export default {
name: 'basket',
data(){
return {
items: [],
total: 0
}
},
components: {
'basket-item': BasketItem
},
mounted(){
fetch('http://localhost:3000/api/basket')
.then(res => res.json())
.then(data => this.items = data)
.then(items => this.calcTotal(items))
eventBus.$on('basket-updated', (data) => {
if(data){
this.$forceUpdate()
}
})
}
我实际上是在尝试像在 React 中一样执行 setState,但在我刷新页面之前,购物篮不会更新。
有没有我可以在 Vue 中做到这一点而不使用套接字之类的东西?
谢谢
【问题讨论】:
标签: javascript vuejs2 vue-component