使用vue3和vant组件写一个二手交易app的商品发布和商品交易页面,且俩个页面存在互动,商品发布后可以在交易页面查看该商品
时间: 2024-04-26 12:25:42 浏览: 133
好的,我会尽力回答你的问题,以下是我提供的参考答案:
考虑到商品发布和商品交易页面需要存在互动,我们可以使用Vue3中的事件总线来实现组件之间的通信。具体来说,我们可以在商品发布页面中发布一个事件,将商品信息传递给商品交易页面,在商品交易页面中接收这个事件,并将商品信息添加到商品列表中。
以下是一个简单的参考代码,仅供参考:
ProductPublish.vue:
```
<template>
<van-form @submit="onSubmit">
<van-field v-model="title" label="商品名称" required></van-field>
<van-field v-model="description" label="商品描述" type="textarea"></van-field>
<van-uploader v-model="images" label="商品图片" multiple></van-uploader>
<van-field v-model="price" label="商品价格" type="number" required></van-field>
<van-button type="primary" native-type="submit">发布商品</van-button>
</van-form>
</template>
<script>
import { ref } from 'vue';
import { Toast, EventBus } from '@/utils';
import { PRODUCT_PUBLISH } from '@/constants';
export default {
setup() {
const title = ref('');
const description = ref('');
const images = ref([]);
const price = ref('');
const onSubmit = () => {
// 构造商品信息
const product = {
title: title.value,
description: description.value,
images: images.value,
price: price.value,
};
// 发布商品信息
EventBus.emit(PRODUCT_PUBLISH, product);
Toast.success('发布成功');
};
return {
title,
description,
images,
price,
onSubmit,
};
},
};
</script>
```
ProductTrade.vue:
```
<template>
<div>
<van-list>
<van-cell v-for="item in products" :key="item.id" :title="item.title" :label="`¥${item.price}`" :thumb="item.images[0]">
<template #right-icon>
<van-button type="primary" size="small" @click="onBuy(item)">购买</van-button>
</template>
</van-cell>
</van-list>
</div>
</template>
<script>
import { reactive, onMounted } from 'vue';
import { Toast, EventBus } from '@/utils';
import { PRODUCT_PUBLISH } from '@/constants';
export default {
setup() {
const products = reactive([]);
const onBuy = (product) => {
// TODO: 购买商品,跳转到支付页面等操作
Toast.success('购买成功');
};
// 监听商品发布事件,添加商品到商品列表中
const onProductPublish = (product) => {
products.push({
id: Date.now(),
...product,
});
};
EventBus.on(PRODUCT_PUBLISH, onProductPublish);
// 获取已发布的商品列表
const getProducts = () => {
// TODO: 从后台获取商品列表
products.push(
{
id: 1,
title: '二手手机',
description: '全新未使用,原装配件',
images: ['https://img.yzcdn.cn/upload_files/2020/07/23/FnL2u8kHkD1Z8X2X4h4GK8xKJbJf.jpg!thumb500'],
price: 800,
},
{
id: 2,
title: '二手电脑',
description: 'i5处理器,8G内存,256G固态硬盘',
images: ['https://img.yzcdn.cn/upload_files/2020/07/23/FnL2u8kHkD1Z8X2X4h4GK8xKJbJf.jpg!thumb500'],
price: 3000,
}
);
};
onMounted(getProducts);
return {
products,
onBuy,
};
},
};
</script>
```
需要注意的是,以上代码仅作为参考,实际使用时需要根据自己的需求进行修改和完善。同时,还需要与后台进行数据交互,实现完整的功能。
阅读全文