vue2 + View design 使用inputNumber设置默认值为undefined但展示数据为1且表单校验不通过的原因

news/2024/12/22 1:12:53/

文章目录

  • 一、背景
  • 二、操作步骤
    • 1.复现前的准备工作
      • (1)vue版本和view design 版本
      • (2)创建一个组件(组件中根据类型渲染不同的组件)
      • (3)在list.vue页面中引入组件,传入配置,使用组件
    • 2.出现的问题
    • 3.解决问题
  • 总结


一、背景

  • View design + vue2的项目,点击编辑按钮,出现弹窗,为了重复使用,写了一个传入配置构建编辑弹窗的组件。组件中有inputNumber组件,出现以下问题:
  • 理想场景:点击编辑打开弹窗后直接点击确定,直接请求编辑接口,然后关闭弹窗。
  • 实际场景:点击编辑打开弹窗后,数字输入框显示数字1,然后表单校验不通过。

二、操作步骤

1.复现前的准备工作

(1)vue版本和view design 版本

{"vue": "^2.6.11","view-design": "^4.7.0",
}

(2)创建一个组件(组件中根据类型渲染不同的组件)

<Formref="advertisingRef":model="advertiserDataForm"name="basic"class="formclass"autocomplete="off":label-width="130"><FormItemv-for="item in advertisingConfig":key="item.label":label="item.label":prop="item.name":rules="item?.rules?.required || item?.rules?.[0]?.required ? item?.rules : null":class="{'itemBorder': item.isBorder, 'itemMargin': item.isMargin, 'itemMarginBottom': item.isMarginBottom }"><template v-else-if="item.type === 'inputNumber'"><InputNumberv-model="advertiserDataForm[item.name]":disabled="item.disabled":style="{width: item.width}":min="item.min"/><spanv-if="item.isIcon"class="ml5">%</span></template></FormItem></Form>

(3)在list.vue页面中引入组件,传入配置,使用组件

[
........{name: 'returnPoint',label: '单价',value: 0, // 绑定数据type: 'inputNumber', // 数据类型min: 0, // 最小值isIcon: true, // 是否显示%iconwidth: '120px',disabled: false, // 是否禁用rules: { required: true, type: 'number', message: '单价不能为空', trigger: 'submit' }}
]

2.出现的问题

【总金额】和【单价】都是使用的inputNumber
问题1: 打开弹窗,切换【渠道资源】出现【总金额】默认展示为1
问题2: 表单校验不通过,奇怪的是输入值后就会会通过表单校验
[图片]

3.解决问题

(1)在组件中打印绑定的数据,和绑定数据的数据类型(由于view design 的表单校验需要校验数据类型)
获取线索:打印后发现绑定数据为空,数据类型为undefined,
(2)我设置的默认值明明为0,怎么可能是undefined呢?
原因:是由于【总金额】是对象totalAmountParams的unitPrice,切换的时候获取不到值,导致
解决:赋值的时候加上?即可。
注意点:判断不要直接写成,this.advertiserForm.unitPrice = row.totalAmountParams?.unitPrice ? row.totalAmountParams?.unitPrice : null,而是需要 row.totalAmountParams?.unitPrice >= 0 ,不然值为0,回显数据为空
this.advertiserForm.unitPrice = row.totalAmountParams?.unitPrice >= 0 ? row.totalAmountParams?.unitPrice : null

(3)为什么数据变成1呢?
拷贝组件中的示例demo,如下,设置默认值为undefined,最小值为0,最大值为100,在demo示例中不难发现,默认值为undefined ,值会默认变成string类型的1。属于是view design 本身的bug
解决: 将只默认设置为null/空字符串

<template><InputNumber :max="100" :min="0" v-model="value1"></InputNumber>
</template>
<script>export default {data () {return {value1: undefined}}}
</script>

总结

  • 设置view design inputNumber组件设置默认值不能设置undefined,可以设置为null/空字符串
  • 写代码需要注意取的值可能为空,使用‘点语法’获取的尽量使用?来校验可能为空的情况进行处理

http://www.ppmy.cn/news/1534372.html

相关文章

ufw:Linux网络防火墙

一、命令简介 ​ufw​&#xff08;Uncomplicated Firewall&#xff09;是一个为 Linux 系统提供简单易用的命令行界面的防火墙管理工具。它是基于 iptables ​的&#xff0c;但提供了更简洁的语法和更直观的操作方式&#xff0c;使得配置防火墙变得更加简单&#xff0c;特别适…

HTML5实现唐朝服饰网站模板源码

文章目录 1.设计来源1.1 网站首页-界面效果1.2 唐装演变-界面效果1.3 唐装配色-界面效果1.4 唐装花纹-界面效果1.5 唐装文化-界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcL…

SpringBoot集成-RocketMQ快速入门

1.MQ概述 MQ全称为Message Queue&#xff0c;即消息队列 &#xff0c;是一种提供消息队列服务的中间件&#xff0c;也称为消息中间件&#xff0c;是一套提供了消息生 产、存储、消费全过程的软件系统&#xff0c;遵循FIFO原则。 1.1MQ常见产品 ActiveMQ ActiveMQ是使用Java语…

水波荡漾效果+渲染顺序+简单UI绘制

创建场景及布置 创建新场景Main,在Main场景中创建一个plane物体&#xff0c;命名为WaterWavePla,具体数值及层级面板排布如下&#xff1a; 编写脚本 创建一个文件夹&#xff0c;用于存放脚本&#xff0c;命名Scripts,创建一个子文件夹Effect,存放特效相关脚本&#xff0c;创建…

第二十三节:学习拦截器或者使用AOP实现用户token参数请求检测(自学Spring boot 3.x的第六天)

这节记录下如何使用aop或者使用interceptor实现用户请求的是否带token&#xff0c;本文只是简单检查用户请求是否带参数token&#xff0c;并不对token的正确性进行验证。通常要从后台缓存中进行token校验。 第一种方式&#xff1a;拦截器方式 第一步&#xff1a;新建一个拦截器…

论文翻译 | LLaMA-Adapter :具有零初始化注意的语言模型的有效微调

摘要 我们提出了一种轻量级的自适应方法&#xff0c;可以有效地将LLaMA微调为指令遵循模型。lama - adapter采用52K自指导演示&#xff0c;在冻结的LLaMA 7B模型上只引入1.2M可学习参数&#xff0c;在8个A100 gpu上进行微调花费不到一个小时。具体来说&#xff0c;我们采用了一…

Windows 环境上安装 NASM 和 YASM 教程

NASM 和 YASM NASM NASM&#xff08;Netwide Assembler&#xff09;是一个开源的、可移植的汇编器&#xff0c;它支持多种平台和操作系统。它可以用来编写16位、32位以及64位的代码&#xff0c;并且支持多种输出格式&#xff0c;包括ELF、COFF、OMF、a.out、Mach-O等。NASM使用…

linux和windows系统使用k8s控制节点的kubernetes资源

一般linux获取master控制节点的授权&#xff1a; [rootharbor ~]# vim /etc/hosts 192.168.1.30 harbor 192.168.1.50 master 192.168.1.51 node-0001 192.168.1.52 node-0002 192.168.1.53 node-0003 192.168.1.54 node-0004 192.168.1.55 node-0005#下…