vue 简单实现购物车:商品基础信息最终的 html 文件 + 商品计数器的组件处理,实现了购物车;

购物车实现过程:

  • Ⅰ、商品购物车作业需求:
    • 1、商品购物车页面示例:
    • 2、具体需求:
  • Ⅱ、html 文件的构建:
    • 商品购物车.html
  • Ⅲ、组件文件的构建:
    • 商品购物车1.js
  • Ⅳ、小结:

Ⅰ、商品购物车作业需求:

1、商品购物车页面示例:

在这里插入图片描述

2、具体需求:


其一、至少包含两款商品,每款商品有不同的单价、起购数量和加减数量;

其二、组件需提取为单独的JavaScript文件;

其三、除了上述要求外,开发人员可以根据自己对“商品购物车”的理解自由发挥增加其他功能;

Ⅱ、html 文件的构建:

商品购物车.html

其一、项目的构建方式:

在这里插入图片描述

其二、代码为:


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="vue.js"></script>
		<script src="商品购物车1.js"></script>
		<style>
			/* 容器 flex布局,横向左边开始,纵向剧中,总共5个 */
			.v1 {
				/* 使用flex布局 */
				display: flex; 
				/* v1容器横向排列 */
				flex-direction: row;
				/* 主轴靠左,从左边开始 */
				justify-content: flex-start;
				/* 纵轴 剧中 */
				align-items: center;
			}
			
			.myImg {
				width: 100px;
				height: 100px;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<h3>商品购物车</h3>
			<div class="v1" v-for="(item, index) in goods">
				<div>
					<img class="myImg" :src="item.goodsImg"/>
				</div>
				<div style="margin-left: 20px;">
					<p>商品名称:{{item.goodsName}}</p>
					<p>商品介绍:{{item.goodsDes}}</p>
				</div>
				<div style="margin-left: 20px;">
					<!-- 使用过滤器对价格进行字符转换-格式化 ¥ 50.00  -->
					单价:{{item.goodsPrice | moneyFilter}}
				</div>
				<div style="margin-left: 20px;">
					<!-- 父组件使用@事件名称 来接收子组件传递过来的事件 -->
					<shop-counter @mycount="updateCount" :ind="index" :qigou="item.goodsQigou" :shuliang="item.goodsAmount"></shop-counter>
				</div>
				<div style="margin-left: 20px;">
					<!-- {{}}从data中的变量读取并显示 -->
					总金额:{{item.goodsPrice * item.goodsAmountNow | moneyFilter}}
				</div>
			</div>			
		</div>
		<script>
			var vm = new Vue({
				el: "#app",
				data: {
					goods: [ //装商品对象,每个商品有图像、名称、介绍、单价、起购数量、加减数量、总金额(单价*数量)
						{
							goodsImg: 'https://img.mp.sohu.com/upload/20170525/9a27d60cbc854536aa26c690c97cf2c0_th.png',
							goodsName: '北京烤鸭',
							goodsDes: '便宜不拉肚子',
							goodsPrice: 5000, //数据库存储金额,都是以币种最小单位存储 方便计算不会丢失精度
							goodsQigou: 5,
							goodsAmount: 2,
							goodsAmountNow: 5
						}, {
							goodsImg: 'https://img.zcool.cn/community/01dd8c6051cb0511013e87f451cc96.jpg@1280w_1l_2o_100sh.jpg',
							goodsName: 'Dior口红',
							goodsDes: '好用又好看',
							goodsPrice: 25012,
							goodsQigou: 1,
							goodsAmount: 1,
							goodsAmountNow: 1
						}
					]
				},
				methods: {
					updateCount(e, i) {
						//e中包含了商品数量e
						console.log("商品数量:" + e + "商品下标:" + i)
						//拿到了商品数量之后,我们要更新goods数组里面对应商品的goodsAmountNow值
						//数组想要识别其中到底是哪一个元素-下标索引
						this.goods[i].goodsAmountNow = e
					}
				},
				filters: {
					moneyFilter(e) {
						//对传递过来的价格进行转换,价格通过e来传递和接收
						// toFixed() JavaScript函数,可以对数字取n位小数 对数字调用toFixed()
						return (e / 100).toFixed(2)
					}
				}
			})
		</script>
	</body>
</html>

其三、展示页面为:

在这里插入图片描述

Ⅲ、组件文件的构建:

商品购物车1.js

其一、代码为:


//商品计数器的组件代码

Vue.component('shop-counter', {
	data: function() {
		return {
			count: parseInt(this.qigou), //商品数量,
			amount: parseInt(this.shuliang),
			subBtn: true,
			addBtn: false
		}
	},
	props: ['qigou', 'shuliang', 'ind'], //通过props接受父组件传递过来的数据
	// 1 颜色高亮 2 自动补全  3 不能换行
	// template: '<button></button>', //组件的HTML代码 两个按钮一个输入框
	// 反引号写代码 缺点1 颜色高亮 2 自动补全  但是可以换行
	template: `
	<div>
		<!-- 商品计数器总共3个组件 -号按钮 输入框 +号按钮 -->
		<button @click="sub" :disabled="subBtn">-</button>
		<input v-model.number="count" style="width: 20px;text-align: center;" @keydown.up="add" v-on:keydown.down="sub"/>
		<button @click="add" :disabled="addBtn">+</button>
	</div>
	`,
	methods: {
		sub() {
			// 最少1个,最多9个
			if (this.count > this.qigou) {
				// 如果>1,就给减
				this.count = this.count - this.amount //商品数量 -1
			}
			if (this.count <= this.qigou) {
				this.subBtn = true //如果商品小于1,禁用-号按钮
			}
			if (this.count < 99) {
				this.addBtn = false //如果商品小于9,启用+号按钮
			}
			//发射  子组件向父组件发射事件,携带商品数量过去
			this.$emit('mycount', this.count, this.ind)
		},
		add() {
			// 增加商品数量
			// 最少1个,最多9个
			if (this.count < 99) {
				this.count = this.count + this.amount //商品数量+1
			}
			if (this.count > this.qigou) {
				this.subBtn = false //如果商品大于1,启用-号按钮
			}
			if (this.count >= 99) {
				this.addBtn = true //如果商品数量大于9,禁用+号按钮
			}
			this.$emit('mycount', this.count, this.ind)
		}
	},
	watch: {
		count() {
			if (this.count < this.qigou || this.count > 99 || isNaN(parseInt(this.count))) {
				this.count = this.qigou
			}
		}
	}
})

Ⅳ、小结:

其一、哪里有不对或不合适的地方,还请大佬们多多指点和交流!
其二、若有转发或引用本文章内容,请注明本博客地址(直接点击下面 url 跳转) https://blog.csdn.net/weixin_43405300,创作不易,且行且珍惜!
其三、有兴趣的话,可以多多关注这个专栏(Vue(Vue2+Vue3)面试必备专栏)(直接点击下面 url 跳转):https://blog.csdn.net/weixin_43405300/category_11525646.html?spm=1001.2014.3001.5482

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/262964.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript实战——ChatGPT前端自适应手机端,PC端

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 可以在线体验哦&#xff1a;体验地址 文章目录 前言引言先看效果PC端手机端 实现原理解释 包的架构目录 引言 ChatGPT是由OpenAI开发的一种基于语言模型的对话系统。它是GPT&#xff08;…

Java智慧工地源码 SAAS智慧工地源码 智慧工地管理可视化平台源码 带移动APP

一、系统主要功能介绍 系统功能介绍&#xff1a; 【项目人员管理】 1. 项目管理&#xff1a;项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。 2. 人员信息管理&#xff1a;支持身份证及人脸信息采集&#…

重学设计模式-Iterator(迭代器模式)

Iterator迭代器模式 介绍&#xff1a; 迭代器模式是一种行为型设计模式&#xff0c;它允许你在不暴露集合底层表示&#xff08;并不知道集合底层使用何种方式对数据尽心存储&#xff09;的情况下遍历集合中的元素。 这种模式提供了一种方法&#xff0c;可以顺序访问一个聚合…

Leetcod面试经典150题刷题记录 —— 矩阵篇

矩阵篇 1. 有效的数独2. 螺旋矩阵Python 3. 旋转图像Python额外开辟数组空间原地置换法 4. 矩阵置零5. 生命游戏Python 1. 有效的数独 题目链接&#xff1a;有效的数独 - leetcode 题目描述&#xff1a; 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验…

管理层年终考核的四种方式

企业管理层是企业中的核心决策者&#xff0c;对企业的经营和发展有着重要的影响。因此&#xff0c;对企业管理层进行年终绩效环评可以更好地了解其对企业的贡献和影响&#xff0c;以便更好地激励和管理管理层&#xff0c;提高企业的绩效和效益。以下是适合管理层做年终考核的四…

华为 WATCH GT 4 跨越想象的边界,打造智慧生活新体验

颜值新高度&#xff0c;健康更全面&#xff01;华为 WATCH GT 4 颜值超能打&#xff0c;表盘随心定义&#xff0c;健康管理再升级身体状况更有数&#xff0c;超长续航给足安全感。跨越想象的边界&#xff0c;打造智慧生活新体验&#xff01;

众和策略股市行情分析:股市里什么叫外资?外资股是什么?

股市里什么叫外资&#xff1f; 外资就是指的国外本钱&#xff0c;即国外出资者参与到我国股市所投入的本钱。通常情况下&#xff0c;外资主要靠直接或直接持有我国股市的股票来达成注入本钱的意图。比较于内资&#xff0c;外资更多的注重于我国商场的整体情况&#xff0c;采用…

融资项目——vue之事件监听

vue通过v-on进行事件监听&#xff0c;在标签中使用v-on:xxx&#xff08;事件名称&#xff09;进行监听&#xff0c;事件触发的相应方法定义在Vue对象中的methods中。如下图所示&#xff1a; 上述代码对按钮进行监听&#xff0c;点击按钮后就会触发solve函数。

理解SpringMVC的工作流程

组件 前置控制器 DispatcherServlet。 映射控制器 HandlerMapping。 处理器 Controller。 模型和视图 ModelAndView。 视图解析器 ViewResolver。 工作流程 spring mvc 先将请求发送给 DispatcherServlet。 DispatcherServlet 查询一个或多个 HandlerMapping&#xff0c;找到…

Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作

一、iframe操作 iframe识别&#xff1a; 语法&#xff1a; driver.switch_to.frame(‘方式’) 1、常见处理方法三种 index&#xff1a;下标name&#xff1a;id或name属性的值webelement&#xff1a;元素 2、通过下标进入 进入第一个iframe&#xff1a; driver.switch_to.…

Hardhat环境搭建(六)---无需翻墙

Hardhat环境搭建 官方地址 node环境 npm环境 git环境 安装hardhat npm init npminit是什么 在node开发中使用npm init会生成一个pakeage.json文件&#xff0c;这个文件主要是用来记录这个项目的详细信息的&#xff0c;它会将我们在项目开发中所要用到的包&#xff0c;以…

服装店收银系统 一种私域运营的神器

私域运营是指通过建立和管理自己的客户数据库来实现精细化营销和客户关系管理。服装店收银系统是门店私域运营的神器之一&#xff0c;服装店收银系统可以帮助店主收集客户的购买信息、消费偏好等数据&#xff0c;从而更好地了解客户需求并进行个性化营销。 以下是一些服装店收银…

springMVC-处理json和HttpMessageConverter<T>

细节说明&#xff1a;目标方法正常返回JSON需要的数据&#xff0c;可以是一个对象&#xff0c;也可以是一个集合&#xff0c;这里我们返回的是一个Dog对象>转成Json数据格式 示例案例&#xff1a; 在springmve中&#xff0c;如果我们返回一个集合List等&#xff0c;或者返回…

odoo17核心概念action5——其他文件

1、action_dialog 这是一个组件&#xff0c;在ActionContainer中有引用&#xff0c;因为ActionContainer用的是动态组件&#xff0c;暂时没有发现有xml文件调用这个组件。 也不知道怎么用 2、action_hook 从名字看&#xff0c;是一共钩子&#xff0c;有两个函数和一个类 cl…

在做题中学习(36):消失的两个数字

面试题 17.19. 消失的两个数字 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;丢失的数字 只出现一次的数字III ps: 下面讲 丢失的数字 思路&#xff0c;另一个在前面的&#xff08;32&#xff09;。 丢失的数字&#xff1a;给定一个包含 [0, n] 中 n 个数的数组…

浏览器的工作原理 - 从输入URL 按下回车到页面展示过程发生了什么?

本文带大家一起了解一下从我们输入一个网址链接开始到页面展示在我们面前&#xff0c;整个浏览器发生了什么&#xff1f;或者说浏览器做了哪些事&#xff0c;咱们以大家常用的baidu.com为例&#xff0c;从输入到 baidu.com 页面出现的整个流程 第一步&#xff1a;地址栏中敲击第…

海外社媒营销新趋势,品牌出海如何做?

社交媒体在网上的影响力是毋庸置疑的。投资社交媒体平台并建立公司形象&#xff0c;提高产品运营收入&#xff0c;提升品牌知名度&#xff0c;对于吸引对您所提供的产品感兴趣的人至关重要。 然而&#xff0c;社交媒体格局总是在变化&#xff0c;这意味着您需要掌握新的社交媒…

【Linux进阶之路】线程

文章目录 一、初始线程1.概念2.执行3.调度4.切换 二、线程控制1.创建2.等待3.分离4.退出5.取消 三、线程安全1.互斥1.1初始1.2理解1.3锁1.3.1概念1.3.2原理1.3.4死锁 2.同步2.1概念2.2原理 3.生产消费者模型 总结尾序 一、初始线程 1.概念 简单的概念&#xff1a; 线程就是一…

全球盲盒热潮:探寻海外市场的文化风潮与商机

近年来&#xff0c;盲盒经济在全球范围内持续升温&#xff0c;其独特的营销方式以及带给消费者的刺激感&#xff0c;引发了广大消费者的热烈追捧。特别是在海外市场&#xff0c;其增长速度之快&#xff0c;让各类盲盒品牌看到了巨大的商业潜力。然而&#xff0c;盲盒市场的快速…

使用工具类Exectors创建线程池

大型并发项目 不能使用Executors 通过ThreadPoolExector的方式 核心线程配置方式: 计算密集型的任务 核心线程数量 CPU的核数 1 IO密集型的任务 核心线程数量 CPU的核数*2 演示: Callable import java.util.concurrent.Callable;public class MyCallable implements Callab…