目录1、Prop 的大小写 2、Prop 类型 3、Prop验证 4、传递静态|动态 Prop 5、修改Prop数据适用于:父子组件通信。如果父组件给子组件传递(函数)数据:本质是子组件给父组件传递数
顺晟科技
2022-09-23 10:59:49
134
1、新创建一个项目:freemall
2、安装依赖:axios、vue-axios
3、配置路由
import Vue from \'vue\'
import VueRouter from \'vue-router\'
import Cart from \'../pages/Cart.vue\'
import Address from \'../pages/Address.vue\'
Vue.use(VueRouter)
const routes = [
{
path: \'/\',
name: \'Cart\',
component: Cart
},
{
path: \'/address\',
name: \'Address\',
component: Address
}
]
const router = new VueRouter({
mode: \'history\',
base: process.env.BASE_URL,
routes
})
export default router
4、App.vue文件:
<template>
<div id="app">
<router-view />
</div>
</template>
5、入口文件main.js:
import Vue from \'vue\'
import App from \'./App.vue\'
import router from \'./router\'
import store from \'./store\'
import axios from \'axios\'
import VueAxios from \'vue-axios\'
import \'./assets/css/base.css\'
import \'./assets/css/index.css\'
Vue.use(VueAxios, axios)
// 提示开关
Vue.config.productionTip = false
new Vue({
router,
store,
render: h => h(App)
}).$mount(\'#app\')
引入 axios 及样式文件。
6、在 components 目录下新建 Header.vue、Footer.vue、Modal.vue 文件
头、尾文件就不写了,Modal.vue文件:
<template>
<div style="display: none">
<div class="md-modal modal-msg md-modal-transition md-show">
<div class="md-modal-inner">
<div class="md-top">
<button class="md-close" @click="closeModal">关闭</button>
</div>
<div class="md-content">
<div class="confirm-tips">
<p slot="message">你确认要删除此条数据吗?</p>
</div>
<div class="btn-wrap">
<a slot="btnGroup" class="btn btn--m" href="javascript:;">确认</a>
<a slot="btnGroup" class="btn btn--m btn--red" href="javascript:;">关闭</a>
</div>
</div>
</div>
</div>
<div class="md-overlay" @click="closeModal"></div>
</div>
</template>
7、在 public 目录下,新建 mock 文件夹,复制粘贴 cart.json 和 address.json 文件。
8、新建 pages目录,创建 Cart.vue 文件:
引入Header、Footer、Modal组件,并发起请求:
<template>
<div>
<nav-header></nav-header>
<div class="nav-breadcrumb-wrap">
<div class="container">
<nav class="nav-breadcrumb">
<a href="/">首页</a>
<span>购物车</span>
</nav>
</div>
</div>
<!-- 定义购物车页面图标 -->
<svg
style="position: absolute; width: 0; height: 0; overflow: hidden;"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
<defs>
<symbol id="icon-ok" viewBox="0 0 32 32">
<title>ok</title>
<path
class="path1"
d="M31.020 0.438c-0.512-0.363-1.135-0.507-1.757-0.406s-1.166 0.435-1.529 0.937l-17.965 24.679-5.753-5.67c-0.445-0.438-1.035-0.679-1.664-0.679s-1.219 0.241-1.664 0.679c-0.917 0.904-0.917 2.375 0 3.279l7.712 7.6c0.438 0.432 1.045 0.681 1.665 0.681l0.195-0.008c0.688-0.057 1.314-0.406 1.717-0.959l19.582-26.9c0.754-1.038 0.512-2.488-0.538-3.233z"
/>
</symbol>
<symbol id="icon-del" viewBox="0 0 32 32">
<title>delete</title>
<path
class="path1"
d="M11.355 4.129v-2.065h9.29v2.065h-9.29zM6.194 29.935v-23.742h19.613v23.742h-19.613zM30.968 4.129h-8.258v-3.097c0-0.569-0.463-1.032-1.032-1.032h-11.355c-0.569 0-1.032 0.463-1.032 1.032v3.097h-8.258c-0.569 0-1.032 0.463-1.032 1.032s0.463 1.032 1.032 1.032h3.097v24.774c0 0.569 0.463 1.032 1.032 1.032h21.677c0.569 0 1.032-0.463 1.032-1.032v-24.774h3.097c0.569 0 1.032-0.463 1.032-1.032s-0.463-1.032-1.032-1.032v0z"
/>
<path
class="path2"
d="M10.323 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"
/>
<path
class="path3"
d="M16 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"
/>
<path
class="path4"
d="M21.677 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"
/>
</symbol>
</defs>
</svg>
<div class="container">
<div class="cart">
<div class="page-title-normal">
<h2 class="page-title-h2">
<span>我的购物车</span>
</h2>
</div>
<div class="item-list-wrap">
<div class="cart-item">
<div class="cart-item-head">
<ul>
<li>商品信息</li>
<li>商品金额</li>
<li>商品数量</li>
<li>总金额</li>
<li>编辑</li>
</ul>
</div>
<ul class="cart-item-list">
<li v-for="item in cartList" :key="item.productId">
<div class="cart-tab-1">
<div class="cart-item-check">
<a
href="javascipt:;"
:class="[item.checked ? \'checked\' : \'\', \'checkbox-btn\', \'item-check-btn\']"
>
<svg class="icon icon-ok">
<use xlink:href="#icon-ok" />
</svg>
</a>
</div>
<div class="cart-item-pic">
<img :src="\'/imgs/\' + item.productImage" />
</div>
<div class="cart-item-title">
<div class="item-name">{{ item.productName }}</div>
</div>
</div>
<div class="cart-tab-2">
<div class="item-price">{{ item.productPrice }}</div>
</div>
<div class="cart-tab-3">
<div class="item-quantity">
<div class="select-self select-self-open">
<div class="select-self-area">
<a class="input-sub">-</a>
<span class="select-ipt">{{ item.productNum }}</span>
<a class="input-add">+</a>
</div>
</div>
</div>
</div>
<div class="cart-tab-4">
<div class="item-price-total">¥{{ item.productPrice * item.productNum }}元</div>
</div>
<div class="cart-tab-5">
<div class="cart-item-opration">
<a href="javascript:;" class="item-edit-btn">
<svg class="icon icon-del">
<use xlink:href="#icon-del" />
</svg>
</a>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class="cart-foot-wrap">
<div class="cart-foot-inner">
<div class="cart-foot-l">
<div class="item-all-check">
<a href="javascipt:;">
<span class="checkbox-btn item-check-btn check">
<svg class="icon icon-ok">
<use xlink:href="#icon-ok" />
</svg>
</span>
<span>全选</span>
</a>
</div>
</div>
<div class="cart-foot-r">
<div class="item-total">
总价:
<span class="total-price">¥89.00元</span>
</div>
<div class="btn-wrap">
<a class="btn btn--red btn--dis">结算</a>
</div>
</div>
</div>
</div>
</div>
</div>
<modal></modal>
<navFooter></navFooter>
</div>
</template>
<script>
import navHeader from \'../components/Header\'
import navFooter from \'../components/Footer\'
import Modal from \'../components/Modal\'
export default {
name: \'Cart\',
components: {
navHeader,
navFooter,
Modal
},
data() {
return {
cartList: [],
priceCount: 0 // 总价
}
},
mounted() {
this.getCart() // 初始化购物车列表
},
methods: {
getCart() {
this.axios.get(\'/mock/cart.json\').then(res => {
// debugger
console.log(res)
this.cartList = res.data.data
})
}
}
}
</script>
效果图:

09
2022-11
19
2022-10
19
2022-10
23
2022-09
23
2022-09
23
2022-09