1.为什么要自己封装一个InputNumber 计数器组件?

因为原始的el-element的el-input-number组件有问题:

  1. 原生组件能输入英文,不能限制只能输入数值;
  2. 原始组件能通过键盘上的删除按钮,将数据全部删除,若提交表单的话,就会将一个空值提交给后端,这是错误的,所以前端还要给组件做非空校验,比较麻烦;
  3. 原始组件必须要失焦才能触发数据更新,若我们在更改数值后,没有点击失焦,而是直接点击确认提交表单,此时我们以为我们已经将数值改变了,其实数值没有改变,数值还是改变之前的值,若此时刷新页面的话,就能看到数值没有更新,所以必须要在更改数值后失焦,才能将数值更改成功;操作起来比较麻烦;
  4. 假如给原始组件设定了最大值和最小值,但是我们依旧可以输入大于最大值或小于最小值的数值,也只有让组件失焦,才能触发数值的范围校验。操作起来也不是很方便,在失焦前就应该不允许输入不合法的数值,这样才合理。

2.基于以上原因,决定自己封装一个 InputNumber 计数器组件:

代码如下:(没办法,只能截图,大家将就一下看吧)

3.引用该自定义组件

4.全局组件引用定义

5.有几个我认为重点的地方讲一下

1. 我这个定义的是一个全局组件,所以不需要每次都在使用的vue页面单独引用,比较方便;若想要单独引用,可以看下面其它的案例;

Vue自定义InputNumber 计数器组件
自定义计数器组件le-input-number

2. 组件中的 <button>一定要加 type=“button”,否则每次点击这个按钮的时候,执行完button的click事件后,会自动的重新刷新一下当前的页面。

原因:
button,input type=button按钮在IE和w3c,firefox浏览器区别:

  • 1、当在IE浏览器下面时,button标签按钮,input标签type属性为button的按钮是一样的功能,不会对表单进行任何操作。
  • 2、但是在W3C浏览器,如Firefox下就需要注意了,button标签按钮会提交表单,而input标签type属性为button不会对表单进行任何操作。

解决Button按钮点击后自动刷新页面的问题

3. 当调用该组件时,v-model 传递给该组件的值,可能是 Number 类型,也可能是 String 类型,所以子组件接受父组件的值 value 的类型必须要定义为 [Number, String]default 0 默认值类型为定义在前面的 Number 类型,[Number, String] 顺序也不能变,变了就会报类型转换错误;也不能写成 Number | String 这种方法,虽然不会报错,但是 VS 编译器会报警告,如果不在乎警告,也可以这么写,实际使用不影响效果。

vue3 props 如何接受多个类型?

4. 在 watch: {} 中监视 counter_num 值的变化,若值改变了,就执行watch: {} 中的逻辑,使用 .replace() 和正则将数据中的非数字的输入去掉,只允许输入数字,若输入值大于了最大值,则将输入值重置为最大值,若若输入值小于了最小值,则将输入值重置为最小值。然后通过$emit('change', this.counter_num)通知父组件调用change方法,将父组件中 formData.autoAofRewitePercentage值改为最新修改后的值this.counter_num,实现了双向绑定。
5. 在 watch: {} 中监视 value 值的变化,当父组件传递过来的 value 值改变时,就执行watch: {} 中的逻辑,及时将 value 值重新赋给 counter_num ,及时将新值回显到 <input> 中,而且此时 counter_num 值的改变也会触发 watch: {} 中 counter_num 值的监控逻辑。
6. 在 <div class="input_num" :class="{'disabled': disabled}"> 中的 :class="{'disabled': disabled}" 意思是,当 disabled 为true时,:class=“disabled”,此时该 div 的 class="input_num disabled";若disabled 为false时,则 :class 为空,那此时该 div 的 class="input_num"
7. 这是css的属性选择器,[属性名=属性值] 选择含有指定属性和属性值的元素。这段css的意思是,当 .input_num 元素中的 class 属性的值为 “input_num” 时,执行该css代码,鼠标移入时该组件的边框就会变成紫色。

8. 当 该组件被禁用时,即父组件传递给子组件的 disabled = true 时,该子组件置灰且不可操作,鼠标移入时出现禁用图标。

因上所述,当 disabled = true 时,<div class="input_num" :class="{'disabled': disabled}"> 中的 class="input_num disabled";那么下图中的元素选择器能够选择到对应的元素,并执行css代码。

cursos: not-allowed; 出现禁用图标;
color: #cccccc; 置灰;
pointer-events: none; 元素不对指针事件做出反应(即禁用鼠标操作);

若禁用该组件的鼠标操作后,鼠标移入时,无法出现禁用图标,则请看下面网址中的解释:
cursor: not-allowed,pointer-events: none不能同时使用
CSS3中pointer-events属性和cursor属性-使用案例
css 鼠标经过显示禁止符号

Vue自定义InputNumber 计数器组件相关推荐

  1. vue 定义全局弹框_VUE路由拦截:Vue自定义全局弹窗组件

    前言 在任何一个平台中,如果需要增加用户黏度,除了用户需要的基本内容外,用户登录注册提交信息也是非常重要的一环,可以了解用户基本信息,用户喜欢等. 抛出前后端混合开发外,vue可以轻松的实现路由拦截. ...

  2. vue自定义音频播放组件_易于创建Vue的自定义音频播放器组件

    vue自定义音频播放组件 音频更好 (vue-audio-better) Easy to create custom audio player components for Vue.js. 易于为Vu ...

  3. vue自定义日历小组件

    vue自定义小日历组件 一.前言 自己开发的项目需要用到类似博客侧边栏小日历组件,觉得自己造一个比较随心所欲,更能满足自己的需求,所以决定自己开发一个.最终效果如图所示. 二.日历样式 我的这个日历组 ...

  4. Vue 自定义多选组件

    Vue 自定义多选组件 子组件(选项卡) checkBoxCard.vue <template><div class="checkBoxCard">< ...

  5. 前端 vue 自定义导航栏组件高度及返回箭头 自定义 tabbar 图标

    前端vue自定义导航栏组件高度及返回箭头 自定义tabbar图标, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12986 喜 ...

  6. vue 自定义键盘组件_使用Vue自定义数字键盘组件的方法

    这篇文章主要介绍了关于使用Vue自定义数字键盘组件的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 inp ...

  7. vue Element InputNumber 计数器传参数

    当我们在列表中使用InputNumber 这个组件的时候 即想要计数器的值,又想给方法传递参数进行操作的时候,就用到了这个,官网文档并么有详细介绍,这里我踩个坑, <div class=&quo ...

  8. vue自定义翻页组件

    效果图如下: 1.在components建立page.vue文件 <template><div class="pagination"><!-- 上 - ...

  9. vue自定义星星评分组件rater,可自定义星星图片,大小,暂不支持半颗星

    在线预览地址:https://wenyuming.github.io/w-demos/dist/index.html#/rater 鉴于第三方ui库的星星评分组件星星基本上是固定,不能自定义,使用起来 ...

最新文章

  1. 我们需要一个时期,把我们之前的愿景用实际行动实现
  2. final在java中怎么用_Java中final的简单使用说明
  3. mysql在linux下配置_mysql数据库在Linux下安装与配置
  4. Cannot resolve field [product], input field list:[user, EXPR$0]
  5. 使用计算机计算一个多边形,多边形面积计算器
  6. [Hash应用问题] 例3.2 给出n个整数,按从大到小的顺序输出前m大的数
  7. react系列之isMounted is an Antipattern
  8. 一些实用博客的分享(ES6详解,echart属性详解)
  9. Windows进程间各种通信方式浅谈(转)
  10. fcntl.h里没有open_国际高中课程里的IB课程 你了解多少?
  11. Python- and or 的短路原则
  12. Linux操作系统原理— 进程与线程管理
  13. 【数学建模】CUMCM-2014A 嫦娥三号软着陆过程 避障阶段图像处理
  14. 历代易学经典名著(简介及电子书下载)V3.0版
  15. 判断字符串是否为null、是否为空
  16. 理解IaaS、SaaS、paas的含义及区别
  17. Photo2Cartoon,照片图片批量转漫画
  18. 泛微OA使用笔记-测试
  19. display:table-cell布局
  20. redis相关 主从架构

热门文章

  1. 一星级挑战:08 数字加密
  2. 国际上车联网产业发展现状研究报告
  3. 【shell】shell脚本实战-awk工作模式讲解
  4. FreeMarker配置详解
  5. Golang Leetcode 538. Convert BST to Greater Tree.go
  6. 【LeetCode】第538题:把二叉搜索树转换为累加树(百度面试题)
  7. python顺序结构实验设计_实验二 顺序结构程序设计
  8. hdparm 测试硬盘读写速度
  9. JPG图像exif和XPM信息中GPS数据姿态数据航向角数据的提取
  10. 【视频课】android studio物联网APP设计制作全套教程--国庆期间全掌握