el-input输入框涉及到scope的校验问题

2023-11-06

需求描述:

在el-table中,对每一行数据的数量进行校验,对于数量要用el-input输入框进行输入数值。

校验主要涉及:每次输入的时候都要清空el-input输入框的数值,输入值只能为数字,并且要对输入的数量进行判断是否超过库存的最大数量。

问题描述:

因为实在el-tablel里面嵌套输入框,所以不可避免需要借助于scope卡槽来完成需求。但是,因为输入框是通过scope.row.number进行绑定的,所以在这里如何如果不满足条件,如何对卡槽数据进行相对应的修改,成了一个比较大的问题。

解决思路:

(1)在数据校验的时候,主要借助于oninput、onkeyup、onfocus。
(2)在对scope.row绑定的数据进行相对应的修改的时候,主要借助于this.$set()。
(3)再触发事件的时候主要借助于@click.native、v-on:mouseover.native、v-on:mouseleave.native

实现截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里我主要贴校验的实验代码:

(1)前端:

<el-table-column label="数量" align="center" width="120" prop="aldQty">
            <template slot-scope="scope">
              <template v-if="scope.row.editaldQty">
                  <el-input 
                   oninput ="value=value.replace(/[^0-9.]/g,'0')"
                    onkeyup="this.value=this.value.match(/\d+\.?\d{0,2}/);this.dispatchEvent(new Event('input'))"
                    onfocus=" this.value = ''"
                  v-model="scope.row.aldQty"  ref="inputaldQty" @click.native = "mouseLeavealdQty(scope.row.aldQty,scope.$index,scope)" v-on:mouseover.native="mouseOveraldQty"  v-on:mouseleave.native="mouseLeavealdQty(scope.row.aldQty,scope.$index,scope)"></el-input>
              </template>
              <span v-if="!scope.row.editaldQty && scope.row.aldQty>0 && scope.row.aldQty < fromData.salesOrderDetailToList[scope.$index]['invStockQty']">
               {{format(scope.row.aldQty)}}
              </span>
            </template>
          </el-table-column>

(2)方法:

 mouseLeavealdQty(number,index,scope) {
      console.log("获取到的"+scope)
      console.log("获得此物料的库存数量"+this.fromData.salesOrderDetailToList[index]['invStockQty']);
      const upNumber = this.fromData.salesOrderDetailToList[index]['invStockQty'];
      console.log("获得悬浮的数值"+number)
      console.log("获得的索引为"+index)
      if(number > upNumber){
        this.$modal.msgError("所选中的物料转出的数量大于库存数量")
        //对所选scope绑定的数据进行修改
        this.$set(this.fromData.salesOrderDetailToList[index],'aldQty',1);
      }
      this.$refs.inputaldQty.blur();
    },
mouseOveraldQty() {
      this.$refs.inputaldQty.focus();
    },

主要方法介绍:

(1)oninput

功能描述:事件在用户输入时触发。

oninput ="value=value.replace(/[^0-9.]/g,'0')"

这句代码的意思就是借助于正则表达式将对于每个输入值如果不是数字则将其替换为数字。

(2)onkeyup

功能描述:事件会在键盘按键被松开时发生。

 onkeyup="this.value=this.value.match(/\d+\.?\d{0,2}/);this.dispatchEvent(new Event('input'))"

但是这里有个坑:
vue的v-model是监听input框的input事件生效的。而通过value直接操作dom元素,vue的v-model是监听不到的!所以要手动分发一个input事件使v-model监听。this.dispatchEvent(new Event(‘input’))。当然这样会导致这句代码在每个input里面复用。也搜过其他人的封装。都感觉不是很灵活,只针对一种正则进行限制。留个坑看以后会不会封装吧。

(3)onfocus

功能描述:事件在对象获得焦点时发生。

onfocus=" this.value = ''"

这句代码解决了每次点击的时候,输入框都会被清空。

(4)@click.native

作用描述:给组件绑定原生事件。

@click.native = "mouseLeavealdQty(scope.row.aldQty,scope.$index,scope)"

在这里如果给el-input组件绑定@click时间是不会被触发的。所以要加@click.native 。
补充:当父组件中引入子组件的时候,当要触发子组件点击事件的时候@click 不生效。

(5)v-on:mouseover.native、 v-on:mouseleave.native

这个其实类似于上面讲的,一个是鼠标移入到输入框则触发该事件,另一个则是鼠标移除的时候触发改事件。

(6)如何解决改变scope.row.属性值 所绑定的数值

在这里我们可以看出v-model=“scope.row.aldQty”,我们通过this.$set()方法来进行改变。

 //对所选scope绑定的数据进行修改
        this.$set(this.fromData.salesOrderDetailToList[index],'aldQty',1);

对于this.$set()如何使用大家可以参考我之前的两篇文章。

(a)vue中this.$set()的用法
https://blog.csdn.net/weixin_43388691/article/details/127423040?spm=1001.2014.3001.5502

(b)el-table+el-tree+el-select动态选择对应值
https://blog.csdn.net/weixin_43388691/article/details/127385435?spm=1001.2014.3001.5502

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

el-input输入框涉及到scope的校验问题 的相关文章

随机推荐

  • 在虚拟机上安装Ubuntu系统

    打开VMware 点击文件新建虚拟机 选择典型 下一步选择安装系统iso映像文件 安装位置我选择的E盘 保持默认 下一步 点击完成 运行系统后 上下左右键操作 选择中文 简体 回车 选择安装Ubuntu服务器版 语言选择中文 简体 选是 中
  • 字符集详解(一看就懂系列)

    原文请参考 https blog csdn net qq 28098067 article details 53486032 一 编码历史与区别 一直对字符的各种编码方式懵懵懂懂 什么ANSI UNICODE UTF 8 GB2312 GB
  • Qt图形视图框架:QGraphicsScene详解

    一 描述 1 场景提供了一个用于管理大量2D图形项的平面 该类充当图形项的容器 它与视图一起用于可视化2D曲面上的图形图形项 2 场景没有自己的视觉外观 只负责管理图形项 3 场景的最大优势之一就是其快速有效地定位图形项的能力 即使场景中有
  • React导入json数据

    本文提供两种方式 读者根据自己的需要进行选择 1 第一种方式 直接import json文件 这种方式依赖于 json loader模块 npm install json loader https www npmjs com package
  • gs104d键盘使用问题记录

    键盘官网说明 官网说明书 有线开关拨到off 无线拨到on 蓝牙连接 1 开关拨OFF 装电池 拨到ON 指示灯闪一下 只是闪一下不是常亮 2 FN加Q指示灯闪一下 空格右边FN按住再按住P长按 指示灯闪烁 松手 第一个设备打开蓝牙添加搜索
  • iOS开发Google Protocol Buffer 的使用(三)

    pragma mark 获取数据 void getData NSUserDefaults defaults NSUserDefaults standardUserDefaults NSString subServerUrl defaults
  • 使用vscode开发C51项目

    使用vscode开发C51项目 头文件包含 settings json中要加入51的头文件 C Cpp default includePath workspaceFolder C Keil v5 C51 INC 扩展类型问题 遇到问题 sb
  • 憨批的语义分割重制版3——Pytorch 搭建自己的PSPNet语义分割平台

    憨批的语义分割重制版3 Pytorch 搭建自己的PSPNet语义分割平台 学习前言 什么是PSPNet模型 代码下载 PSPNet实现思路 一 预测部分 1 主干网络介绍 2 加强特征提取结构 3 利用特征获得预测结果 二 训练部分 1
  • 【VQ-VAE-2论文精读】Generating Diverse High-Fidelity Images with VQ-VAE-2

    VQ VAE 2论文精读 Generating Diverse High Fidelity Images with VQ VAE 2 0 前言 Abstract 1 Introduction 2 Background 2 1 Vector
  • 【正点原子STM32连载】第二十四章 高级定时器PWM输入模式实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv
  • 清除TortoiseGit保存密码

    找到C Users Administrator目录下的 gitconfig文件 该文件为隐藏文件 解除隐藏后即可看到 删除 credential helper manager 参考链接 另一种方法清除密码 https www cnblogs
  • 2022年互联网行业的寒流

    最近很多小伙伴私信我说到2022年是他从业以来找工作最艰难的一次 企业各种卷 BAT等一线大厂释放人才 毕业等各种裁人政策不断 每年几百万人应届毕业生 包括985 211 研究生 博士 硕士等不断的涌入 小公司面临倒闭 大公司面临裁人让30
  • 《软件工程》第5章系统建模

    系统建模就是建立系统抽象模型的过程 其中每一个模型表示系统的一个不同的视角或观点 系统建模现在通常意味着在UML中的图类型基础上使用某种图形化的表示法表示系统 然而 也有可能要开发系统的形式化 数学 模型 通常将其作为详细的系统规格说明 在
  • Qt常用小部件

    常用小部件 QLabel 常用来显示文本 数字 图片 gif动图 新建桌面应用程序 项目名testQLabel 基类QWidget 类名Widget 勾选创建界面文件 类构造函数中添加如下代码 准备好一个图片及gif格式动图 ui gt s
  • cookie,session,token之间的关系

    今天和大家聊一下关于 Cookie Session Token 的那些事儿 这是我的一个读者朋友面试微信的实习岗位时遇到的 在此和大家分享一下 话不多说 直接开车 1 网站交互体验升级 作为网友的我们 每天都会使用浏览器来逛各种网站 来满足
  • nginx做yum源

    我这边环境是原先有个nginx只是做了代理转发 现在需要在通过nginx做yum源方便后期安装源 1 原先的配置代理转发 为不影响原先配置及端口 在http中最末尾加 include local nginx conf d conf 加载其它
  • (UI)Android自定义图片裁剪

    具体UI效果如下 思路 绘制5个rect 其中四个为半透明深色背景 一个为透明背景的裁剪内容框 之前也考虑过用region 但是自测的时候 发现两个region之间颜色会相互影响 可能是我代码问题 有了解的小伙伴可以指导一下哈 就用了5个R
  • jQuery 入门教程(36): jQuery UI Menu 示例

    jQuery Menu 组件可以应用到任何具有父 子关系的元素 就其变为菜单 但通常使用u gt li 如果你希望使用除 ul li 之外的元素 可以通过menus 来配置 下例使用缺省的 ui和 li 菜单支持选择事件select 因此可
  • YoloV5源码部分注释解读(ultralytics版本)(yolo.py)

    yolo py的主要作用是构建yolov5的模型 而且这个yolo py文件可以单独执行 这里主要对目标检测中的相关类进行了注释解读 分割等没有用到的暂时没有注释 第一部分 导入包 配置路径等 第二部分 程序入口 执行程序 在这部分中 创建
  • el-input输入框涉及到scope的校验问题

    需求描述 在el table中 对每一行数据的数量进行校验 对于数量要用el input输入框进行输入数值 校验主要涉及 每次输入的时候都要清空el input输入框的数值 输入值只能为数字 并且要对输入的数量进行判断是否超过库存的最大数量