首页 > 其他分享 >新版本 el-input 不支持 v-model.trim,自定义指令去除首尾空格

新版本 el-input 不支持 v-model.trim,自定义指令去除首尾空格

时间:2023-11-17 15:58:14浏览次数:41  
标签:trim el const 自定义 inputEle input

问题场景

<el-input type="textarea" v-model.trim="value" /> 多行文本输入框无法换行。

经测试,去掉 .trim 修饰符后,就可正常换行了。

官网文档 ,发现 element-ui 新版本不支持 v-model 修饰符。

image

因此,若在新版本的 element-uiel-input 中使用 v-model.trim ,会发生以下问题:

  1. 无论在文本的前、中、后,都无法输入空格;
  2. type 为 textarea 时,无法换行。

解决

不使用 v-model.trim 怎样去掉输入内容首尾的空格?

有两种方案:

  1. 提交数据时,手动执行 .trim()
  2. (推荐)封装自定义指令 v-trim

为了便于后续开发,推荐方案二。

directives/trim/index.js
// 获取元素
function getInput(el) {
  let inputEle;
  if (el.tagName !== "INPUT") {
    // 若 el-input 中 type 为 textarea
    if (el._prevClass.includes("el-textarea")) {
      inputEle = el.querySelector("textarea");
    } else {
      inputEle = el.querySelector("input");
    }
  } else {
    inputEle = el;
  }
  return inputEle;
}

// 创建自定义事件
function dispatchEvent(el, type) {
  const evt = new Event(type);
  el.dispatchEvent(evt);

  // 以下为过时的方法,已被废弃
  // let evt = document.createEvent("HTMLEvents");
  // evt.initEvent(type, true, true);
  // el.dispatchEvent(evt);
}

const Trim = {
  inserted: (el) => {
    let inputEle = getInput(el);
    const handler = function (event) {
      const newVal = event.target.value.trim();
      if (event.target.value !== newVal) {
        event.target.value = newVal;
        dispatchEvent(inputEle, "input");
      }
    };
    el.inputEle = inputEle;
    el._blurHandler = handler;
    // 事件监听
    inputEle.addEventListener("blur", handler);
  },
  unbind(el) {
    const { inputEle } = el;
    inputEle.removeEventListener("blur", el._blurHandler);
  },
};
export default Trim;
directive/index.js
import trim from "./trim/index";

const install = function (Vue) {
  Vue.directive("trim", trim);
};

if (window.Vue) {
  window["trim"] = trim;
  Vue.use(install); // eslint-disable-line
}

export default install;

使用时给 el-input 加上 v-trim 即可。

注意

编辑器会提示 initEvent() 初始化事件已被废弃,如下所示:

image

因此,使用 new Event 代替。

参考链接

  1. el-input类型为textarea时不能使用v-model.trim
  2. vue2 利用自定义指令全局去除el-input框前后空格
  3. vue3自定义全局指令(过滤前后空格,输入框自动聚焦、点击复制文本到粘贴板)
  4. new Event 创建自定义事件
  5. event.initEvent 已过时

标签:trim,el,const,自定义,inputEle,input
From: https://www.cnblogs.com/shayloyuki/p/17838835.html

相关文章

  • JAVA解析Excel文件 + 多线程 + 事务回滚
    1.项目背景:客户插入Excel文件,Ececel文件中包含大量的数据行和数据列,单线程按行读取,耗时大约半小时,体验感不好。思路:先将excel文件按行读取,存入List,然后按照100均分,n=list.szie()/100+1;n就是要开启的线程总数。(实际使用的时候,数据库连接池的数量有限制,n的大小要结合数据库连......
  • JAVA 解析Excel + 多线程 + 事务回滚(2)
    该方法为网上查询,感觉可行,并未真正尝试。主线程:packagecom.swagger.demo.service;importcom.alibaba.excel.context.AnalysisContext;importcom.alibaba.excel.event.AnalysisEventListener;importcom.swagger.demo.config.SpringJobBeanFactory;importcom.swagger.demo.m......
  • 梯度消失和梯度爆炸——从本质上说残差、LSTM遗忘门(依赖cell state)解决思路都是一样的
    在深度学习中,梯度消失和梯度爆炸是两个常见的问题。梯度消失是指在进行反向传播时,梯度会随着层数的增加而指数级地减小,直到几乎消失,导致深层的神经网络参数无法有效更新。这主要是因为使用了像sigmoid和tanh这样的激活函数,它们在输入值较大或较小的情况下,梯度值接近于0。    梯......
  • Spring Boot 自定义注解,AOP 切面统一打印出入参请求日志
    今天主要说说如何通过自定义注解的方式,在SpringBoot中来实现AOP切面统一打印出入参日志。小伙伴们可以收藏一波。废话不多说,进入正题!一、先看看切面日志输出效果在看看实现方法之前,我们先看下切面日志输出效果咋样:从上图中可以看到,每个对于每个请求,开始与结束一目了然,并且打印......
  • 02_自定义Springboot starter
     创建springbootstarter 创建一个demostarter  创建配置类@Configuration@EnableConfigurationProperties(EmailProperties.class)@ConditionalOnBean(EmailEnable.class)publicclassEmailAutoConfiguration{static{System.out.println("Em......
  • Dapper QueryMultiple throws "No columns were selected"
    调试存储过程发现某字段NULL,拼成的SQL最后啥也没有了。。。原因是存储过程没有执行到查询SQL语句QueryAsyncthrows"Nocolumnswereselected"whenstoredprocdoesn'tperformaselectstatement #591Closed  toannguyen83 openedthisissue onAug27,20......
  • 直播平台搭建,实现自定义设置登录页面
    直播平台搭建,实现自定义设置登录页面1.在resources中建立static文件夹(默认找这里面的页面)创建login.html <!DOCTYPEhtml><htmlxmlns:th="http://www.thymeleaf.org"><head>  <metacharset="UTF-8">  <title>static中的login</title></hea......
  • Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean
    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】第十章、对象的生命周期1.什么是对象的生命周期指的是一个对象创建、存活、消亡的一个完整过程2.为什么要学习对象的生命周期由Spring负责对象的......
  • How To Delete Reservations Using Standard API INV_RESERVATION_PUB.Delete_Reserva
    SolutionSummary:ThereservationAPIINV_RESERVATION_PUB.Delete_Reservationwilldeletereservationsacceptingthereservationidandoptionallyserialnumberstolocateandremovereservations.Careshouldbetakentoensurerelatedobjectslikesaleso......
  • 35个超实用excel快捷键
    以下是一些常用的Excel快捷键,希望对你有所帮助。如果你想要了解更多快捷键,可以参考Excel的官方文档或者在网上搜索相关信息。Ctrl+C:复制选定的单元格或单元格范围。Ctrl+X:剪切选定的单元格或单元格范围。Ctrl+V:粘贴复制或剪切的内容。Ctrl+Z:撤销上一步操作。Ctrl+......