分别创建每个核心组件,如Login.vue, Main.vue, Cart.vue, ProductDetail.vue, 和 Checkout.vue。能给出详细的创建示例?吗
时间: 2024-12-15 17:13:27 浏览: 12
当然可以,以下是这些组件的基本创建结构和部分代码示例:
### 1. Login.vue (登录组件)
```html
<!-- login.vue -->
<template>
<div class="login-form">
<!-- 登录表单元素 -->
<input v-model="username" placeholder="用户名">
<input type="password" v-model="password" placeholder="密码">
<button @click="submitForm">登录</button>
<p v-if="errorMessage">{{ errorMessage }}</p>
</div>
</template>
<script>
export default {
data() {
return {
username: '',
password: '',
errorMessage: ''
};
},
methods: {
submitForm() {
this.errorMessage = '';
if (!this.username || !this.password) {
this.errorMessage = '请输入完整信息';
} else {
// 模拟API调用,实际应用中用axios
fetch('/api/login', {
method: 'POST',
body: JSON.stringify({ username: this.username, password: this.password }),
headers: { 'Content-Type': 'application/json' }
})
.then(response => response.json())
.then(user => {
// 登录成功后的操作,比如设置sessionStorage
})
.catch(error => {
this.errorMessage = '登录失败,请检查信息';
});
}
}
}
};
</script>
```
### 2. Main.vue (主页面)
```html
<!-- main.vue -->
<template>
<div>Welcome, {{ user.name }}!</div>
<router-link to="/cart">去购物车</router-link>
</template>
<script>
import { mapState } from 'vuex';
export default {
computed: {
...mapState(['user']) // 从Vuex获取用户信息
}
};
</script>
```
### 3. Cart.vue (购物车组件)
```html
<!-- cart.vue -->
<template>
<ul>
<li v-for="item in items" :key="item.id">
{{ item.title }} - {{ item.price }}
<button @click="removeItem(item)">移除</button>
</li>
</ul>
</template>
<script>
export default {
props: {
items: Array // 接收来自父组件的商品列表
},
methods: {
removeItem(item) {
// 简化示例,实际应用中从Vuex中删除
this.$store.commit('deleteItem', item.id);
}
}
};
</script>
```
### 4. ProductDetail.vue (商品详情页)
```html
<!-- product-detail.vue -->
<template>
<h2>{{ product.name }}</h2>
<p>价格: {{ product.price }}</p>
<button @click="addToCart(product)">加入购物车</button>
</template>
<script>
export default {
props: {
product: Object // 接收产品对象
},
methods: {
addToCart(product) {
// 将产品添加到购物车,可能涉及Vuex的state更新
this.$store.commit('addItemToCart', product);
}
}
};
</script>
```
### 5. Checkout.vue (结账组件)
```html
<!-- checkout.vue -->
<form @submit.prevent="submitOrder">
<!-- 结算表单 -->
...
</template>
<script>
export default {
methods: {
submitOrder() {
// 发送订单,可能包含运费计算等逻辑,然后用axios发送到服务器
this.sendOrder();
},
sendOrder() {
this.$store.dispatch('placeOrder');
}
}
};
</script>
```
以上仅是简单示例,实际开发中还需要考虑更复杂的UI设计、错误处理和更丰富的状态管理。记得根据项目需求调整和优化代码。
阅读全文