IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 利用Vue写一个购物车项目 -> 正文阅读

[JavaScript知识库]利用Vue写一个购物车项目

?

<!DOCTYPE?html>

<html?lang="en">

<head>

????<meta?charset="UTF-8">

????<meta?http-equiv="X-UA-Compatible"?content="IE=edge">

????<meta?name="viewport"?content="width=device-width,?initial-scale=1.0">

????<title>Document</title>

</head>

<body>

????<script?src="js/vue.js"?type="text/javascript"></script>

????<script?src="js/jquery-3.6.0.js"?type="text/javascript"></script>

????<div?id="app"?>

????????<div?it="container">

????????????<my-cart></my-cart>

????????</div>

????</div>

????<style>

????????*?{

????????????

????????????padding:?0;

????????????margin:?0

????????}

????????

????????a?{

????????????text-decoration:?none;

????????}

????????

????????.container?{

????????????width:?500px;

????????????margin:?10px?auto;

????????}

????????

????????.title?{

????????????width:?500px;

????????????height:?50px;

????????????text-align:?center;

????????????line-height:?50px;

????????????font-size:?20px;

????????????background-color:?paleturquoise;

????????}

????????

????????.item?{

????????????width:?500px;

????????????position:?relative;

????????????height:?50px;

????????????border-bottom:?1px?solid?rgb(0,?0,?0);

????????}

????????

????????.item?img?{

????????????float:?left;

????????????width:?100px;

????????????height:?50px;

????????}

????????/*?.item?name?{

????????????position:?absolute;

????????????float:?left;

????????????width:?120px;

????????????margin-left:?10px;

????????????top:?15px;

????????????left:?100px;

????????}?*/

????????

????????/*?.item?.price?{

????????????position:?absolute;

????????????float:?left;

????????????width:?120px;

????????????margin-left:?10px;

????????????top:?15px;

????????????left:?100px;

????????}?*/

????????

????????.item?.change?{

????????????position:?absolute;

????????????left:?220px;

????????????top:?15px;

????????????float:?left;

????????????width:?200px;

????????}

????????

????????.change?a?{

????????????float:?left;

????????????display:?block;

????????????width:?20px;

????????????height:?20px;

????????????font-size:?18px;

????????????text-align:?center;

????????????line-height:?20px;

????????????background-color:?#ccc;

????????}

????????

????????.change?input?{

????????????float:?left;

????????????width:?50px;

????????????margin:?0?5px;

????????}

????????

????????.item?.del?{

????????????position:?absolute;

????????????top:?8px;

????????????left:?420px;

????????????color:?red;

????????????font-size:?24px;

????????}

????????

????????.item?.del:hover?{

????????????top:?0;

????????????height:?50px;

????????????background-color:?rgb(247,?247,?247);

????????}

????????

????????.total?{

????????????position:?relative;

????????????width:?500px;

????????????height:?50px;

????????????background-color:?sandybrown;

????????}

????????

????????.total?span?{

????????????position:?absolute;

????????????top:?14px;

????????????left:?250px;

????????}

????????

????????.total?span?em?{

????????????color:?red;

????????????font-style:?normal;

????????????font-size:?20px;

????????}

????????

????????.total?button?{

????????????position:?absolute;

????????????top:?8px;

????????????left:?400px;

????????????width:?50px;

????????????height:?35px;

????????????border-radius:?25%;

????????????border:?none;

????????????outline:?none;

????????????background-color:?tomato;

????????}

????</style>

????<script?src="js/vue.js"></script>

????<script>

????????//?三个子组件

????????var?CartTitle?=?{

????????????

????????????template:?`<div?class="title">我的商品</div>`

????????}

????????var?CartList?=?{

????????????props:?['list'],

????????????template:?`?<div?class="list">

????????????????????<div?class="item"?:key="item.id"?v-for="item?in?list">

????????????????????????<img?:src="item.img"?alt="">

????????????????????????<div?class="name">{{item.name}}</div>

????????????????????????<div?class="change">

????????????????????????????<a?href=""?@click.prevent="sub(item.id)">-</a>

????????????????????????????<input?type="text"?class="num"?:value="item.num"?@blur="changenum(item.id,$event)">

????????????????????????????<a?href=""?@click.prevent="add(item.id)">+</a>

????????????????????????</div>

????????????????????????<div?class="del"?@click="del(item.id)">×</div>

????????????????????</div>

????????????????</div>

????????????????????`,

????????????methods:?{

??????????????

????????????????del:?function(id)?{

????????????????????

????????????????????this.$emit("del-cart",?id);

????????????????},

???????????????

????????????????changenum:?function(id,?event)?{

???????????????????

????????????????????this.$emit('change-num',?{

????????????????????????id:?id,

????????????????????????num:?event.target.value

????????????????????})

????????????????},

????????????????

????????????????sub:?function(id)?{

????????????????????this.$emit('sub-num',?id);

????????????????},

????????????????

????????????????add:?function(id)?{

????????????????????this.$emit('add-num',?id);

????????????????}

????????????}

????????}

????????var?CartTotal?=?{

????????????????props:?['list'],

????????????????template:?`<div?class="total">

????????????????????<span>总价:<em>{{total}}</em>¥</span>

????????????????????<button>结算</button>

????????????????</div>`,

????????????????computed:?{

????????????????????total:?function()?{

????????????????????????var?sum?=?0;

????????????????????????this.list.forEach(item?=>?{

????????????????????????????sum?+=?item.price?*?item.num;

????????????????????????});

????????????????????????return?sum;

????????????????????}

????????????????}

????????????}

????????????//父组件

????????Vue.component('my-cart',?{

????????????data:?function()?{

????????????????return?{

????????????????????

????????????????????list:?[{

????????????????????????id:?1,

????????????????????????name:?'TCL彩电',

????????????????????????price:?460,

????????????????????????num:?1,

????????????????????????img:?'images/猫一.jpg'

????????????????????},?{

????????????????????????id:?2,

????????????????????????name:?'机顶盒',

????????????????????????price:?3000,

????????????????????????num:?1,

????????????????????????img:?'images/猫二.jpg'

????????????????????},?{

????????????????????????id:?3,

????????????????????????name:?'海尔冰箱',

????????????????????????price:?6799,

????????????????????????num:?1,

????????????????????????img:?'images/猫三.jpg'

????????????????????},?{

????????????????????????id:?4,

????????????????????????name:?'小米手机',

????????????????????????price:?2000,

????????????????????????num:?1,

????????????????????????img:?'images/猫二.jpg'

????????????????????},

?????????????????????{

????????????????????????id:?5,

????????????????????????name:?'PPTV电视',

????????????????????????price:?1000,

????????????????????????num:?1,

????????????????????????img:?'images/猫二.jpg'

????????????????????}

????????????????]

????????????????}

????????????},

????????????template:?`<div?class="mycart">

????????????????<cart-title></cart-title>

????????????????<cart-list?:list="list"?@del-cart="delcart($event)"?@change-num="changeNum($event)"?@sub-num="subnum($event)"?@add-num="addnum($event)"></cart-list>

????????????????<cart-total?:list="list"></cart-total>

????????????????</div>`,

????????????components:?{

????????????????'cart-title':?CartTitle,

????????????????'cart-list':?CartList,

????????????????'cart-total':?CartTotal,

????????????},

????????????methods:?{

????????????????delcart:?function(id)?{

????????????????????//?根据id删除list中对应的数据

????????????????????//?1.找到id对应数据的索引

????????????????????var?index?=?this.list.findIndex(item?=>?{

????????????????????????return?item.id?==?id;

????????????????????});

????????????????????//?2.根据索引删除对应的数据

????????????????????this.list.splice(index,?1);

????????????????},

????????????????//?根据id修改list中的数量num

????????????????changeNum:?function(val)?{

????????????????????//console.log(val);

????????????????????this.list.some(item?=>?{

????????????????????????if?(item.id?==?val.id)?{

????????????????????????????item.num?=?val.num;

????????????????????????}

????????????????????})

????????????????},

????????????????

????????????????subnum:?function(event)?{

????????????????????//?console.log(event);?event是点击的id号

????????????????????this.list.some(item?=>?{

????????????????????????if?(item.id?==?event?&&?item.num?>?0)?{

????????????????????????????item.num--;

????????????????????????}

????????????????????})

????????????????},

????????????????

????????????????addnum:?function(event)?{

????????????????????this.list.some(item?=>?{

????????????????????????if?(item.id?==?event)?{

????????????????????????????item.num++;

????????????????????????}

????????????????????})

????????????????}

????????????}

????????});

????????var?vm?=?new?Vue({

????????????el:?"#app",

????????????data:?{

????????????}

????????});

????</script>

</body>

</html>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:04:57  更:2021-09-12 13:06:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:43:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码