目录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