antdv Input组件maxLength属性设置默认值

在一个项目开发时,经常用到input组件或者textarea组件,当前项目使用的时antdv@1.7.8。提交测试时,测试人员反馈AInput和ATextarea组件没有限制字符长度导致保存时数据库插入报错,因此需要在前端需要限制字符长度。由于项目已经开发过半,因此想通过使用设置默认值方式设置maxLength属性。

确定方案

  1. 普通input最大长度默认设置为64
  2. textarea最大长度设置为200

最终实现

再main.js文件中增加代码

import Antd, { Input } from "ant-design-vue";
Input.props.maxLength.default = 64;

然后手动再将每个ATextarea单独增加:max-length="200"

踩坑过程

  1. 开始想通过修改默认值的方式分别修改AInput、ATextarea两类组件,代码如下:
    src\main.js
import Antd, { Input } from "ant-design-vue";
Input.props.maxLength.default = 64;
Input.TextArea.props.maxLength.default = 200;
  1. 运行结果
    结果发现AInput和ATextarea组件的maxlength都变成了200

  2. 原因查找
    \node_modules\ant-design-vue\es\input\TextArea.js使用函数式组件编写,核心代码如下

import inputProps from './inputProps';
var TextAreaProps = _extends({}, inputProps, {autosize: PropTypes.oneOfType([Object, Boolean]),autoSize: PropTypes.oneOfType([Object, Boolean])
});export default {name: 'ATextarea',inheritAttrs: false,props: _extends({}, TextAreaProps),render: function render() {var props = {props: _extends({}, getOptionProps(this), {prefixCls: prefixCls,inputType: 'text',value: fixControlledValue(stateValue),element: this.renderTextArea(prefixCls),handleReset: this.handleReset}),on: getListeners(this)};return h(ClearableLabeledInput, props);}
}

ATextarea组件的props属性使用的_extends({}, TextAreaProps)进行浅拷贝


\node_modules\ant-design-vue\es\input\Input.js也使用函数式组件编写,代码如下:

import inputProps from './inputProps';
export default {name: 'AInput',inheritAttrs: false,props: _extends({}, inputProps),render: function render() {var props = {props: _extends({}, getOptionProps(this), {}),on: getListeners(this)};return h(ClearableLabeledInput, props);}
};

同样AInput组件的props属性也使用的_extends({}, inputProps)进行浅拷贝


node_modules\ant-design-vue\es\input\inputProps.js定义了props属性

import PropTypes from '../_util/vue-types';
export default {maxLength: PropTypes.number,
};

结论:PropTypes.number是引用类型,因此被浅拷贝后实际都是一个地址。无论给AInput还是ATextarea的maxlength赋默认值最终是相互影响的,所以导致上边的问题。


node_modules\ant-design-vue\es\_util\vue-types\index.js定义vue类型的公共代码

var VuePropTypes = {get number() {return toType('number', {type: Number}).def(currentDefaults.number);},
}

node_modules\ant-design-vue\es\_util\vue-types\utils.js定义vue类型的公共代码

/*** Adds `isRequired` and `def` modifiers to an object* @param {string} name - Type internal name* @param {object} obj - Object to enhance* @returns {object}*/
export var toType = function toType(name, obj) {Object.defineProperty(obj, '_vueTypes_name', {enumerable: false,writable: false,value: name});withRequired(obj);withDefault(obj);//定义默认值,实际上为obj添加了一个def方法,通过该方法定义默认值if (isFunction(obj.validator)) {obj.validator = obj.validator.bind(obj);}return obj;
};/*** Adds a `def` method to the object returning a new object with passed in argument as `default` property* @param {object} type - Object to enhance*/
export var withDefault = function withDefault(type) {Object.defineProperty(type, 'def', {value: function value(def) {if (def === undefined && this['default'] === undefined) {this['default'] = undefined;return this;}if (!isFunction(def) && !validateType(this, def)) {warn(this._vueTypes_name + ' - invalid default value: "' + def + '"', def);return this;}this['default'] = isArray(def) || isPlainObject(def) ? function () {return def;} : def;return this;},enumerable: false,writable: false});
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core 6.0 efcore +sqlserver增删改查的demo

asp.net core 6.0 efcore sqlserver增删改查的demo 下面是一个使用ASP.NET Core 5.0和Entity Framework Core进行增删改查操作的示例。 首先,创建一个空的ASP.NET Core 6.0 Web应用程序项目。 然后,安装以下NuGet包: Microsoft.EntityFra…

揭秘程序员和技师的7大共同点,最后一点绷不住了

大家好,这里是程序员晚枫,周末朋友出去放松回来,给我分析了一下程序员和技师的7个相同点,尤其是最后一点让我彻底绷不住了! 我也分享给大家。 1、都有工号。98号技师,380号技师大家都很熟悉了&#xff0c…

Unity使用C# Protobuf源码

目录 第一步:下载源码 第二步:运行C#构建文件 第三步:处理报错(如果你已安装对应的SDK则不会报错) 第四步:复制库文件到你的工程 第一步:下载源码 protobuf github源码https://github.com/p…

Qt中在QLabel上画点,重写QLabel类

Qt中在QLabel上画点,重写QLabel类 QT中label进行绘图 1.首先新建一个类,让这个类继承QLabel 2.在类中对鼠标点击事件及绘图事件进行重写 3.然后在UI框架下添加label控件, 4.右键label控件,添加重写的类,将其提升为刚…

ROBOGUIDE教程:FANUC机器人X型焊枪气动点焊焊接

目录 概述 机器人系统创建 X型点焊焊枪安装与配置 机器人组输出(GO)信号配置 气动点焊初始设置 点焊设备设置 点焊设备I/O信号设置 焊接控制器I/O信号设置 X型点焊焊枪运动控制配置 气动焊枪手动运行操作 气动点焊焊接指令介绍 机器人点焊焊接程序编写 机器人仿…

[管理与领导-10]:IT基层管理者 - 目标、责任、落实 - 如何把管理者的高高在上的目标,落地、落实到团队实施

目录 前言: 情形1:下属不知如何下手 情形2:下属不敢承诺 情形3:下属能力不够 情形4:奖罚机制失效,干活的动力不够 补充:目标与落实过节的进一步分析 1. 目标分解出了问题:目…

单例模式写法的总结(保证线程安全)

首先,单例模式分为饿汉模式和懒汉模式 单例模式有什么用呢? 可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问,从而方便的控制了实例个数,并节约系统资源。 例如:DataSource&#x…

DNS:使用 bind9 配置主从权威DNS服务器

写在前面 分享一些 使用 bind9 配置主从权威名称服务器的笔记理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式…

24届近3年南京信息工程大学自动化考研院校分析

今天给大家带来的是南京信息工程大学控制考研分析 满满干货~还不快快点赞收藏 一、南京信息工程大学 学校简介 南京信息工程大学位于南京江北新区,是一所以大气科学为特色的全国重点大学,由江苏省人民政府、中华人民共和国教育部、中国气…

Vue中遇到的问题(vue中模板添加注释报错)

vue注释出错&#xff1a; 问题&#xff1a; 发现在vue的template模板中使用<!-- 内容 -->进行代码注释时&#xff0c;<!-- 报红报错“Attribute name cannot contain U0022 ("), U0027 (), and U003C (<)”。 解决方案&#xff1a; 插件冲突&#xff0c;…

C++数学知识模板

试除法判定质数 模板 bool check_primes(int x) {for(int i 2; i * i < x; i) {if(x % i 0) return false;}return true; } 模板题 866. 试除法判定质数 给定 n个正整数 ai&#xff0c;判定每个数是否是质数。 输入格式 第一行包含整数 n。 接下来 n行&#xff0c…

查询 npm/yarn 安装依赖的全局路径及路径修改

一、NPM 1.查询 npm 安装依赖的全局路径 npm prefix -g 2. 修改 npm 全局安装位置 npm config set prefix "D:\nodejs\node_modules\npm\node_modules" 3. 修改 npm 全局 cache 位置 npm config set cache "D:\nodejs\node_modules\npm\cache" 4. np…

LeetCode--HOT100题(27)

目录 题目描述&#xff1a;21. 合并两个有序链表&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;21. 合并两个有序链表&#xff08;简单&#xff09; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组…

Java 成功实现通过网址URL截图保存

Java 实现通过网址URL截图 1.DjNativeSwing方式 &#xff08;不好用&#xff09;2.phantomjs方式 &#xff08;截图还是有瑕疵&#xff09;3.selenium方式 &#xff08;满意&#xff0c;成功实现&#xff09;maven 引入下载相关浏览器chrome下载相关浏览器chromedriver驱动后端…

反色操作之c++实现(qt + 不调包)

1.介绍 反色的实际含义是将R、G、B值反转。如果颜色的范围为0-255之间&#xff0c;则新图的R、G、B值为255减去原图的R、G、B值。其公式为&#xff1a; R_new 255 - R_old G_new 255 - G_old B_new 255 - B_old 2.代码实现&#xff08;代码是我以前自学图像处理时写的&…

控制renderQueue解决NGUI与Unity3D物体渲染顺序问题

NGUI与Unity3D物体渲染顺序问题&#xff0c;做过UI的各位应该都遇到过。主要指的是UI与Unity制作的特效、3D人物等一同显示时的层次问题。 由于UI与特效等都是以transparent方式渲染&#xff0c;而Unity与NGUI在管理同是透明物体的render queue时实际上互相没有感知&#xff0…

力扣1137.第N个泰波那契数(动态规划)

/*** author Limg* date 2023/08/11* 泰波那契序列 Tn 定义如下&#xff1a; * T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2* 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 */ #include<iostream> using namespace std; int tribonacci…

开源数据库Mysql_DBA运维实战 (部署服务篇)

前言❀ 1.数据库能做什么 2.数据库的由来 数据库的系统结构❀ 1.数据库系统DBS 2.SQL语言(结构化查询语言) 3.数据访问技术 部署Mysql❀ 1.通过rpm安装部署Mysql 2.通过源码包安装部署Mysql 前言❀ 1.数据库能做什么 a.不论是淘宝&#xff0c;吃鸡&#xff0c;爱奇艺…

不知什么原因,背调没过?

前两天写了一篇文章《电话背调&#xff0c;我给他打了8分》&#xff0c;跟大家聊了职场中沟通的一些基本原则和经验。背调时&#xff0c;同事没给打招呼&#xff0c;几乎也没什么私交&#xff0c;但出于“不坏别人好事”的原则&#xff0c;给了8分的评价。 在稍微大一些的公司…