计数器组件

2023-05-16

涉及事件 @longpress----长按时触发 ,@touchend----手指从屏幕上离开时触发
1.计数器为文本标签的子组件

<template>
	<view class="counter-box">
		<view class="counter">
			<text class="reduce-add" @click="addReduce(-1)" @longpress="longAddReduce(-1)" @touchend="stopLong">-</text>
			<text class="amount">{{count}}{{unit}}</text>
			<text class="reduce-add" @click="addReduce(1)" @longpress="longAddReduce(1)" @touchend="stopLong">+</text>	
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				setTime:'', // 长按时触发的定时器
			}
		},
		props: ['count','minZero','unit'], // 当前数量,最大数量,单位
		methods: {
			addReduce(type){
				let count = this.count + type
				if(count > this.minZero) {
					uni.showToast({title:"超出最大购买数量",icon:"none"})
					return
				}
				if(count < 1){
					 uni.showToast({title:`至少需要购买1${this.unit}`,icon:"none"})
					 return
				}
				this.$emit('handleCount',type)
			},
			// @longpress 长按触发事件
			longAddReduce(type){
				let count = this.count + type
				console.log(count)
				if(count > this.minZero || count <1) return
				this.setTime = setInterval(()=>{
					this.addReduce(type)
				},200)
			},
			// @touchend 手指从屏幕上离开时触发
			stopLong(){
				clearInterval(this.setTime)
			}
		}
	}
</script>

<style>
.counter-box {
	display: inline-block;
	border-radius:10rpx;
	border:1px solid #dedede;
	font-size: 20upx;
	color: #7F8389;
	vertical-align: top;
}

	.counter {
		margin-left: 12upx;
		font-size: 26upx;
		vertical-align: bottom;
		display: inline-block;
	}
	
		.reduce-add {
			font-weight: lighter;
			display: inline-block;
			color: #CFCFCF;
			width: 42upx;
			height: 42upx;
			line-height: 40upx;
			text-align: center;
			font-size: 46upx;
			vertical-align: middle;
		}
		.amount {
			display: inline-block;
			width: 78upx;
			height: 42upx;
			line-height: 42upx;
			text-align: center;
			vertical-align: middle;
			color: #F37B1D;
			background: #FFF9F3;
			border-left:1px solid #dedede;
			border-right:1px solid #dedede;
		}
</style>

引用

<couter :count='count' :unit='unit' :minZero='minZero' @handleCount='CountEvent'></couter>
count 当前数量
unit 单位
mminZero 最大限制数量
CountEvent(e){ this.count += e },

2.计数器为input标签的子组件
在实现这段代码的时候碰到一个问题
在这里插入图片描述
props是父组件向子组件传值的一种方法,在这里我不可避免的将props传递的值直接在子组件中重新进行赋值,故而报此错误

  • 父子组件通信禁止子组件直接修改父组件传递过来的props值,可以通过变量存储props的值
  • 可以通过watch来监听props的变化对存储的值进行重新赋值
<template>
	<view class="counter-box">
		<view class="counter">
			<text class="reduce-add" @click="addReduce(-1)" @longpress="longAddReduce(-1)" @touchend="stopLong">-</text>
			<input class="amount" v-model="countNum" type="number" @input="inputAmount">
			<text class="reduce-add" @click="addReduce(1)" @longpress="longAddReduce(1)" @touchend="stopLong">+</text>	
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				setTime:'', // 长按时触发的定时器
				countNum:this.count, // 使用变量存储props中count的初始值,
			}
		},
		watch:{count(){ this.countNum = this.count }}, //为了当count发生变化时监听到新值,通过watch来进行监听赋值
		props: ['count','minZero','unit'], // 当前数量,最大限制数量,单位
		methods: {
			addReduce(type){
				let countNum = Number(this.countNum) + type
				if(countNum > this.minZero) {
					uni.showToast({title:"超出最大购买数量",icon:"none"})
					return
				}
				if(countNum < 1){
					 uni.showToast({title:`至少需要购买1${this.unit}`,icon:"none"})
					 return
				}
				this.$emit('handleCount',type)
			},
			// @longpress 长按触发事件
			longAddReduce(type){
				let countNum = Number(this.countNum) + type
				if(countNum > this.minZero || countNum <1) return
				this.setTime = setInterval(()=>{
					this.addReduce(type)
				},200)
			},
			// @touchend 手指从屏幕上离开时触发
			stopLong(){
				clearInterval(this.setTime)
			},
			// input输入验证
			inputAmount(){
				this.$emit('verificationAmount',this.countNum)
			}
		}
	}
</script>

引用

<couter :count='count' :unit='unit' :minZero='minZero'
@handleCount='CountEvent' @verificationAmount='Amount'></couter>

count 当前数量
unit 单位
mminZero 最大限制数量
CountEvent(e){ this.count += e }, 
Amount(count){
	if(count == 0){
		 this.count= count.replace(/[^1-9]/g,1)
	}else if(count > this.minZero) {
		this.count = this.minZero
		uni.showToast({title:`超出最大购买数量了`,icon:"none"})
	}else {
		this.count= count.replace(/\D/g,1)
	}
}, 

待续。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计数器组件 的相关文章

  • 解决 Cannot find module‘[object Object]‘报错问题

    报错信息 xff1a 不可以找到一个module 模块 js中的模块大致与require挂钩 xff0c 可以查看是否有地方错误引用了文件或错误使用了require 修改后即可解决问题
  • Jmeter性能测试(3)---SOAP/XML-RPC Request

    jmeter xff08 三 xff09 SOAP XML RPC Request 项目背景 xff1a 公司的微信端H5界面新开发了会员注册功能 xff0c 需要对其进行压力测试 项目目标 xff1a 需要承受每分钟最少6000的压力 一
  • Pycharm 之Scipy聚类色彩

    一 利用第三方库Scipy聚类 1 可以在jupyter notebook里先尝试一下scipy的功能 聚类的思想为初始先确定均值 xff0c 分类 xff0c 其次计算每组的平均值 xff0c 再次进行分类 xff0c 反复进行使得结果更
  • TM4C123系列(一)————GPIO

    电赛准备搞飞机 xff0c 特地学了下TM4 xff0c 准备用TM4搞飞控 一 实验介绍 点亮TM4C123板载LED 二 原理图 三 所需函数 1 SysCtlClockSet uint32 t ui32Config 参数 xff1a
  • TM4C123系列(三)————PWM输出

    一 实验介绍 使用PWM控制板载LED绿灯与蓝灯交替呼吸闪烁 二 PWM介绍 TM4C123有两个PWM模块 xff0c 每个模块有四个发生器和一个控制模块 xff0c 每个发生器可以产生两路PWM输出 xff0c 一共可以输出16路PWM
  • STM32与K210串口通信的解码问题(基于正点原子源码)

    这次电赛做的声源定位 xff0c 用的麦克风阵列加k210采集声音 xff0c k210需要将数据传送stm32 xff0c 在这里涉及到一个解码问题 xff0c 这个解码是我在之前用stm32与其他设备串口通信中从来没有遇到过的 xff0
  • 【数据结构与算法】数据结构

    数据结构 1 基本概念和术语2 逻辑结构与物理结构3 抽象数据类型 1 基本概念和术语 数据 xff1a 是描述客观事物的符号 xff0c 是计算机中可以操作的对象 xff0c 是能被计算机识别 xff0c 并输入给计算机处理的符号集合 数
  • requests库在爬虫中最常用方法简析

    requests 前言一 安装二 使用方法1 引入库2 发起请求3 获取数据4 其他 三 简单示例总结 前言 requests是基于urlib3的用于发起http请求的python第三方库 xff0c 使用方便 xff0c 响应快速 一 安
  • 爬取英语六级高频词

    文章目录 任务一 指定url二 发起请求并获取响应数据三 对响应数据进行数据解析四 持久化存储总结 任务 将网站中所有英语六级高频词以及翻译获取 xff0c 然后进行存储 一 指定url 网站中单词被分开存放在1 7页中 第1页的url x
  • 基于tkinter的第一个GUI小项目:背英语六级单词软件

    文章目录 任务1 引入库2 读入数据3 打开窗口4 初始化5 放置标签和按钮6 按钮事件7 演示 任务 基于爬取到的英语六级高频词 xff0c 利用python中的tkinter做出一个能起到考察词汇掌握情况作用的GUI 1 引入库 spa
  • Linux 6.1/6.2发布新补丁:缓解AMD处理器fTPM间歇性卡顿问题

    导读早些时候 xff0c AMD承认 xff0c 在Linux系统中开启AMD锐龙处理器的fTPM xff0c 将可能导致系统出现间歇性的卡顿 死机等情况 据悉 xff0c 该Bug在Linux 6 1内核中表现得最为明显 xff0c 这是
  • RHCE. Stratis 管理分层存储

    通过Stratis xff0c 便捷的使用精简配置 xff08 thin provisioning xff09 xff0c 快照 xff08 snapshots xff09 和基于池 xff08 pool based xff09 的管理和监
  • Jmeter性能测试(5)--JDBC Request

    jmeter xff08 五 xff09 JDBC Request jmeter中取样器 xff08 Sampler xff09 是与服务器进行交互的单元 一个取样器通常进行三部分的工作 xff1a 向服务器发送请求 xff0c 记录服务器
  • jQuery获取或设置元素的属性值prop/attr

    获取元素的属性值 固有属性 39 div prop color 自定义属性 39 div attr index html代码 lt a href 61 34 www baidu com 34 title 61 34 百度 34 gt 百度
  • Aop小案例

    AOP小案例 AOP Aspect Oriented Programming 面向切面编程 00P Object Oriented Programming 面向对象编程 xff0c 用对象化的思想来完成程序 AOP是对0OP的一个补充 xf
  • 详细介绍在ubuntu20.04如何安装ROS系统,附常见错误的解决办法

    为保证在安装的过程中配置无误 xff0c 建议先打开软件与更新的界面 xff0c 检查框出的选项是否打上了 检查完成后 xff0c 就可以开始安装啦 xff01 1 添加ROS软件源 将以下两个命令任意选择一个复制到ubuntu的终端执行
  • ROS1学习笔记:创建工作环境与功能包(ubuntu20.04)

    参考B站古月居ROS入门21讲 xff1a 创建工作环境与功能包 基于VMware Ubuntu 20 04 Noetic版本的环境 文章目录 一 工作空间介绍二 创建工作空间2 1 创建工作空间2 2 编译空代码的工作空间2 3 设置和检
  • SQL注入

    常用函数 SQL注入步骤 联合查询注入 函数与报错注入 SQL盲注 宽字节注入 sqlmap工具 常用函数 常用系统函数 基础信息函数功能system user 系统用户名user 用户名current user 当前用户名session
  • 信息收集*

    域名信息收集 DNS记录查询 whois查询 备案信息查询 子域名信息收集 常用工具 查询网站 网络信息收集 c段查询 nmap扫描 获取真实IP 敏感信息收集 目录后台扫描 指纹信息识别 系统指纹识别 中间件指纹识别 Web程序指纹识别

随机推荐

  • 将kali linux 的语言切换为中文

    重置root密码 导入kali后 xff0c 一般没有root密码 xff0c 需要重置root密码的 使用sudo passwd root 命令重置密码 换源 因为默认源下载东西特别慢 xff0c 所以我们需要换源 输入vim etc a
  • curl命令

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具 xff0c 可以说是一款很强大的http命令行工具 它支持文件的上传和下载 xff0c 是综合传输工具 xff0c 但按传统 xff0c 习惯称url为下载工具 htt
  • Docker基本命令

    一 安装docker 1 docker运行时需要到管理员用户权限 现在我们是普通用户 xff0c 终端内输入命令 su root切换为root用户 使用apt get update 更新软件源中的所有软件列表 2 使用apt install
  • Nmap常用命令

    nmap hostname ip 或者多个 ip 或者子网 192 168 123 iL ip txt 扫描 ip txt 的所有 ip A 包含了 sV xff0c O xff0c 探测操作系统信息和路由跟踪 一般不用 xff0c 是激烈
  • Jmeter性能测试(6)--元件的作用域与执行顺序

    jmeter xff08 六 xff09 元件的作用域与执行顺序 jmeter是一个开源的性能测试工具 xff0c 它可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的父子关系 xff0c 那么随着它们的顺序和所在的域不同 xff0c 它们
  • sql,逻辑漏洞,xss,反序列化思维导图

  • Arduino MAX30102脉搏心率传感器使用教程

    最近闲来无事 xff0c 得到了一块MAX30102 xff0c 手头刚好有多余的Arduino控制板 xff0c 就跑了个官方的案例 xff0c 发现测出来的脉搏和心率还是挺准的 xff0c 三星手机用过这个系列的芯片 xff0c 但是有
  • 两种方法用IDEA创建一个Servlet程序 新手教程详解

    1 Servlet 是什么 xff1f Java Servlet 是运行在 Web 服务器或应用服务器上的程序 xff0c 它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层 2
  • reduce()累计器理解与使用实例

    关于reduce reduce 语法 xff1a arr reduce callback accumulator currentValue index array initialValue arr reduce accumulator cu
  • {}与Object.create(null)

    var one 61 创建的对象带有 proto 下面有一些方法与属性 xff0c 这便是js的原型链继承 xff0c 继承了object的方法和属性 xff1b 故在遍历对象时 xff0c 会遍历原型链上的属性 xff0c 带来性能上的损
  • uni-app 全局变量机制

    getApp globalData 全局变量机制 在App vue中 export default globalData text 39 text 39 在App vue中调用 this globalData text在onLaunch生命
  • vue3动态注册路由

    在vue cil2中 xff0c 我们可以通过webpack中require context这个api实现工程自动化 xff0c 而在vue cil3里vite替代了webpack xff0c 节省了webpack冗长的打包时间的同时我们也
  • try{}catch(res){}、throw(exception)、new Error()

    1 try catch res try 中的代码出现错误异常时 xff0c 系统会将异常信息封装到error对象中 xff0c 传递给catch res xff0c 包含res message res name等 EvalError eva
  • new Map()

    1 new Map let data 61 new Map data set key value 添加一个新建元素到映射 Map 1 key 61 gt value data get key 返回映射中的指定元素 data has key
  • Proxy代理

    Proxy用于修改某些操作的默认行为 xff0c 等同于在语言层面做出修改 xff0c 所以属于一种 元编程 语法 xff1a let proxy 61 new Proxy target handler target 所要拦截的目标对象ha
  • Jmeter性能测试(7)--定时器

    jmeter xff08 七 xff09 定时器 jmeter提供了很多元件 xff0c 帮助我们更好的完成各种场景的性能测试 xff0c 其中 xff0c 定时器 xff08 timer xff09 是很重要的一个元件 xff0c 最新的
  • oninput完美限制输入正整数

    oninput完美限制输入非0正整数 注意vue中需要 64 input进行绑定 方法一 64 input 61 34 if this value length 61 61 1 this value 61 this value replac
  • 行内存放数据属性data-id

    data 61 39 data 39 为行内存放数据的属性 xff0c 可通过事件源中的currentTarget dataset获取data 存放的值 另外css可通过 data 放置的标签名 data 61 39 data 39 设置
  • js常用封装方法

    span class token comment 生成随机数 64 length 指定长度 return 随机数 span span class token keyword export span function span class t
  • 计数器组件

    涉及事件 64 longpress 长按时触发 xff0c 64 touchend 手指从屏幕上离开时触发 1 计数器为文本标签的子组件 lt template gt lt view class 61 34 counter box 34 g