antd表单文本域(扩展带输入字符数量)二次封装

背景

项目是基于antd,需求表单中文本域要求显示当前输入文案字数以及最大限制字数。

实现难点

  1. 表单校验总是不触发
    antd中form-model的校验规则很奇怪,form-item标签下面添加一层标签,校验规则就不触发了,如下多加一层div:
 <a-form-model ref="basicInfo" class="basic-info" :model="prodBasicInfo" :rules="rules" layout="inline">
    <a-form-model-item label="商品副标题" prop="slogan">
      <div>
    	 <a-input v-model="prodBasicInfo.slogan" style="width: 700px" placeholder="最多50个字" :maxLength="50" />
      </div>
    </a-form-model-item>
    ...
<a-form-model>

	rules: {
        slogan: [
          { required: true, message: "商品副标题不能为空", trigger: "blur" },
          { max: 20, message: "名称最多20个字", trigger: "blur" },
        ],
    }

上续情况表单失去焦点事件就校验不触发,那封装组件自然会外套一个标签,本文需要封装的组件dom结构会如下:

 <div class="textarea">
    <a-input
      v-model="textValue"
      type="textarea"
      class="text-area"
      :maxLength="maxLength"
      :autoSize="autoSize"
      :placeholder="placeholder"
      @input="onInput"
      @blur="handleBlur"
    />
    <span class="fontNum-prompt">{{ value.length }}/{{ maxLength }}</span>
  </div>

自然也是校验规则 不触发

解决办法

绑定a-input的失焦事件,将当前表单中的值 抛出去;就可以校验 ----不懂为什么,但确实可以做到;

总体实现代码如下:

<!-- 二次封装 ant 文本框,添加【已输长度/最多长度】显示 -->
<template>
  <div class="textarea-plus">
    <a-input
      v-model="textValue"
      type="textarea"
      class="text-area"
      :maxLength="maxLength"
      :autoSize="autoSize"
      :placeholder="placeholder"
      @input="onInput"
      @blur="handleBlur"
    />
    <span class="fontNum-prompt">{{ value.length }}/{{ maxLength }}</span>
  </div>
</template>

<script>
export default {
  name: "AntTextarea",
  props: {
    value: {
      type: [String, Number],
      default: null,
    },
    placeholder: {
      type: String,
      default: "",
    },
    maxLength: {
      type: Number,
      default: null,
    },
    autoSize: {
      type: Object,
      default() {
        return {
          minRows: 2,
        };
      },
    },
  },
  data() {
    return {
      textValue: this.value,
    };
  },
  methods: {
    handleBlur(e) {
      // this.$emit("update:value", e.target.value);
      this.$emit("blur", e.target.value);
    },
    onInput(e) {
      this.$emit("update:value", e.target.value);
      // this.$emit("input", e.target.value);
    },
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="less" scoped>
.textarea-plus {
  position: relative;
  .text-area {
    padding-bottom: 30px;
  }
  .fontNum-prompt {
    position: absolute;
    bottom: 10px;
    right: 20px;
    line-height: 20px;
    color: rgba(0, 0, 0, 0.3);
  }
}
</style>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
超级加密 3000一款功能强大的文件加密和文件夹加密软件。主要针对于进常对重要文件加密和文件夹加密的用户。该软件有超快和最强的文件加密、文件夹加密功能,采用先进的加密算法,使你的文件加密和文件夹加密后,真正的达到超高的加密强度,让你的加密文件和加密文件夹无懈可击,没有密码无法解密,并且可以防止删除,复制和移动。 【软件功能特点】 数据加密功能 本软件采用先进的加密算法,真正的达到了超高的加密强度,让你的加密数据无懈可击。并且速度也特快,每秒可加密25 — 50M的数据。文件、文件夹加密后,双击它,会弹出密码输入对话框,只有输入正确的密码才能打开该文件。使用完毕退出以后,它自动恢复到加密状态,无需再加密。把文件夹和文件直接加密成Exe可执行文件。你可以将重要的数据以这种方法加密后再通过网络或其他的方法在没有安装[超级加密 3000]的机器上使用。 数据粉碎功能 可以把你想删除但怕在删除后被别人用数据恢复软件恢复的数据彻底在电脑中删除。 文件夹保护功能 还有文件夹的加密码、隐藏、伪装等保护功能。 磁盘保护功能 将您的软盘、硬盘和光驱等所有驱动器有选择的隐藏和加锁。并且可以禁止使用USB设备或只读使用USB存储设备。 增强功能 还有清理系统垃圾和系统优化和安全设置等功能。 【常见问题】 1、打开和解密有什么区别? 打开:加密的文件或文件夹打开后,处于临时解密的状态。当软件检测到你不在使用这个加密文件或文件夹时,就自动恢复到加密状态。 解密:把加密的文件或文件夹恢复到未加密状态。 2、怎样加密文件和文件夹? 你可以在我的电脑中用鼠标右键单击你要加密的文件或文件夹,在弹出菜单中选择[超级加密]。也可以在软件的主窗口中选择加密数据,然后点击[数据加密]。 3、怎样完全解密加密的文件和文件夹? 在软件的主窗口中选择解密数据,然后点击[数据解密]。 4、为什么要要设置管理员密码? 为了不让其他人,随意使用此软件,对你的数据进行恶意的加密。 5、可以对移动硬盘上的数据进行加密吗? 可以。 6、怎样解密全面加密的文件夹? 在我的电脑中用鼠标右键单击你要解密的全面加密文件夹,然后在弹出菜单中选择[解密全面加密的文件夹]。 7、怎样解除受到保护的文件夹? 在软件窗口中选择[文件夹保护],在文件夹保护窗口,选择你要解除保护的文件夹记录,然后选择[解除保护]。 8、加密的文件夹或文件可以用U盘移动到其他电脑上吗? 使用“移动加密”方式加密的文件夹和文件可以移动到其他电脑上,甚至移动到未安装本软件的电脑上照常使用。 9、该软件若被他人从我的电脑上卸载或删除,我原来已加密的数据会被解密吗? 不会。您的文件夹仍然保持加密状态,重装本软件即可解开。 10、加密的文件夹在安全模式下会不会失效? 不会。不仅安全模式,甚至DOS、双系统下都不会失效! 11、密码忘记怎么办? 请牢记密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值