ant design vue官网_antd vue pro

ant design vue官网_antd vue pro根据需求,可以知道需要回显格式需要为“XXXX年XX月XX日”,查看组件库a-date-picker,了解到format属性可以将在输入框中数据转换为特定格式。 在提交数据时,由于我们是封装组件,给其他页面中使用,所以需要将需要提交的值由子组件置到父组件上,所以在日期组件中选中…

dateStingPicker组件封装

需求:

  1. 页面中使用日期选择框,输入框中回显日期格式“XXXX年XX月XX日”
  2. 提交数据时将日期格式转换为字符串,如:“20210314”
  3. 查看时,回显数据日期格式同样为“XXXX年XX月XX日”

演示实例

2021-03-14 16.11.52.gif

序——使用软件及框架版本

  1. vue 2.6.11
  2. ant-design-vue 1.7.1
  3. moment.js(日期转换依赖)

设计思路

  1. 根据需求,可以知道需要回显格式需要为“XXXX年XX月XX日”,查看组件库a-date-picker,了解到format属性可以将在输入框中数据转换为特定格式。
  2. 在提交数据时,由于我们是封装组件,给其他页面中使用,所以需要将需要提交的值由子组件置到父组件上,所以在日期组件中选中日期出发的事件change/input,在选中日期的时候需要使用到$emit,将值置到上层副组件。
  3. 在回显数据时,查看页面数据的时候,表单上显示数据,此时从后台数据中拿到的是字符串“20210314”,同时需要将数据格式化为“XXXX年XX月XX日”,显示在输入框中。

具体代码过程

1. template模板区域

<template>
  <div>
    <!-- 这里momVal是momentValue的缩写,因为value的真实值是moment对象 -->
    <a-date-picker :value="momVal" :allowClear="allowClear" :disabled="disabled" :format="dateFormat" :mode="mode" :placeholder="placeholder" @change="dateChanged" >
    </a-date-picker>
  </div>
</template>

在这里用到几个属性,

  1. 由于是封装组件,所以使用value实现数据的双向绑定,在表单中使用allClear的时候在点击清除按钮时也可以清除表单显示和底层数据。
  2. mode是输入框显示模式,date、month、year可选,但是year模式时不太好用,具体可以参考下一篇,year年份组件封装。
  3. 当然组件上不止有@change事件,@blur@select都是可以使用的,可以根据项目需求来具体使用,不过在父组件上使用事件时,需要在子组件props 中声明,并在模板部分使用双向绑定:select="select"

2. js区域

<script>
import moment from 'moment'

export default {
  name: 'dateStringPicker',
  props: {
    value: {
      type: [String, Number],
      default: ''
    },
    // 返回的日期格式
    dateFormat: {
      type: String,
      default: 'YYYY年MM月DD日'
    },
    // 类型,选择年份请传入"year",选择年月请传入"month"
    mode: {
      type: String,
      default: 'date'
    },
    placeholder: {
      type: String,
      default: '请选择日期'
    },
    disabled: {
      type: Boolean,
      default: false
    },
    allowClear: {
      type: Boolean,
      default: true
    },
    // 判断输入的两种状态input/change
    triggerChange: {
      type: Boolean,
      default: true
    }
  },
  data () {
    const dateStr = this.value
    return {
      // 由于vue是数据驱动页面加载的,所以在data中需要给value一个初始值
      momVal: !dateStr ? null : moment(dateStr, this.dateFormat),
      lastValue: ''
    }
  },
  watch: {
    // 此处的监听,用来实现设计思路3
    value (val) {
      if (!val) {
        this.momVal = null
      } else {
        this.momVal = moment(val, 'YYYYMMDD')
      }
    }
  },
  methods: {
    moment,
    // 此处change事件,用来实现设计思路2,此处有注意事项,当时写的时候还是遇到一些问题的
    dateChanged (mom) {
      // 参考注意事项3
      if (!mom) {
        if (this.triggerChange) {
          this.$emit('change', null)
        } else {
          this.$emit('input', null)
        }
      } else {
        // 参考注意事项1
        this.lastValue = moment(mom).format('YYYYMMDD')
        // 参考注意事项2
        if (this.triggerChange) {
          this.$emit('change', this.lastValue
        } else {
          this.$emit('input', this.lastValue)
        }
      }
    }
  }
}
</script>

注意事项:

  1. 在提交数据的时候需要提交给表单的数据我们通过lastValue传递;如果不需要格式转换可以直接使用this.momVal = value这样传递的数据类型还是moment对象。

  2. 生造一个triggerChange属性的原因是,在ant-design-vue组件中,使用a-form表单组件的时候,分了两种情况

    • 提交数据时不需要校验规则,使用v-model绑定数据
    • 提交数据时需要校验规则,使用v-decorator

    在使用v-model时,点击日期触发的事件时input,而在使用v-decorator时,点击日期触发的事件时change

  3. 为什么要在提交数据的change 事件中,添加一个!mom的条件判断,原因是:在表单上添加allClear属性之后,表单中会出现可以清除当前输入框数据的符号“❌”,在清除表单数据的时候,表单上回显示no valid或者NaN,原因可能是清除之后表单的初始值数据类型不对,这点我也不是太清楚。总之,解决方法就是添加一个!mom的条件判断,在清除表单数据的时候重新给表单value赋一个空值null,因为value的类型是对象,所以不能是""

测试demo实例

<template>
  <div> <div class="box"> <h1>this is dateStringPiker</h1> <div class="btn"> <a-button type="primary" @click="click"> 提交数据</a-button> </div> <a-form :form="editForm" layout="inline"> <!-- 使用v-model时,是以input事件从子组件抛出value值 --> <a-form-item label="v-model形式的绑定的 日期"> <date-string-picker v-model="editForm.date" :trigger-change="false"> </date-string-picker> </a-form-item> <!-- 在需要校验的情况下,在表单中使用v-decorator的形式绑定, 同时自组件要以change的形式将value抛出到上层副组件 --> <!-- <a-form-item label="v-decorator形式绑定的 日期">--> <!-- <date-string-picker--> <!-- v-decorator="['date',{initialValue:''}]"--> <!-- :trigger-change="true">--> <!-- </date-string-picker>--> <!-- </a-form-item>--> </a-form> </div> </div>
</template>

<script> import dateStringPicker from '@/component/dateStringPicker' export default { name: 'demo', components: { dateStringPicker }, data() { return { // 使用v-decorator要使用下面方法注册form表单 // editForm: this.$form.createForm(this) // v-model的形式,form表单注册则比较简单 editForm: { date: '' } } }, methods: { click() { console.log('点击按钮') // v-model绑定测试提交 // console.log(this.editForm) // v-decorator绑定,测试数据提交 this.editForm.validateFields((err, value) => { console.log(err) console.log(value) }) } } } </script>

<style scoped lang="less"> .box { margin: 30px 30px; } .btn { margin: 30px 30px; } </style>

Find me

Gitee:gitee.com/heyhaiyon/a…

微信公众号:heyhaiyang

掘金:heyhaiyang

博客园:heyhaiyang

头条号:heyhaiyang

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13477.html

(0)

相关推荐

  • shiro、jwt、redis整合

    shiro、jwt、redis整合shiro、jwt、redis、SpringBoot整合

    2023-04-23
    159
  • 死磕 36 个 JS 手写题(搞懂后,提升真的大)[通俗易懂]

    死磕 36 个 JS 手写题(搞懂后,提升真的大)[通俗易懂]作为一个程序员,代码能力毋庸置疑是非常非常重要的,就像现在为什么大厂面试基本都问什么 API 怎么实现可见其重要性。我想说的是居然手写这么重要,那我们就必须掌握它,所以文章标题用了死磕,一点也不过分,也希望不被认为是标题党。 作为一个普通前端,我是真的写不出 Promise A…

    2023-08-17
    105
  • Python中的forenumerate函数

    Python中的forenumerate函数在Python的编程语言中,forenumerate函数常常被广泛使用。它可以将一个可遍历的对象组合成一个索引序列,同时列举出数据元素和它们的位置。这个函数在编程中有广泛的应用。接下来的文章将详细介绍forenumerate函数的性质、用法、以及它的优势和缺点。

    2024-04-25
    73
  • centos修改mysql用户的密码

    centos修改mysql用户的密码1、centos初始化安装,mysql默认是没有密码的 命令行登陆:mysql -u root -p 提示输入密码=》输入密码,即可 图 1 2、查询用户,输入命令:select user,host…

    2023-03-10
    163
  • 免费Python在线面试练习测试

    免费Python在线面试练习测试
    Python作为一种高级编程语言,现已成为众多企业和开源社区的首选语言。在以信息技术为核心的现代化社会中,Python的广泛应用正在为许多行业和领域带来新的变革和机遇。同时,竞争也在不断升级。众多有才华的程序员以及培训机构涌现出来,使得就业市场变得异常激烈。企业和个人想要脱颖而出,全方位的技能和经验都非常重要。

    2023-12-13
    111
  • 包含用python实现因子分析的词条

    包含用python实现因子分析的词条 一些小提示和小技巧可能是非常有用的,特别是在编程领域。有时候使用一点点黑客技术,既可以节省时间,还可能挽救“生命”。

    2023-10-30
    131
  • 在Linux中设置Python环境变量

    在Linux中设置Python环境变量PYTHONPATH是一个环境变量,用于Python解释器查找模块文件的路径列表。在Linux中,可以使用export命令将PYTHONPATH添加到系统环境变量中。

    2024-04-08
    76
  • 幻梦之晓2.0(梦境0.2)

    幻梦之晓2.0(梦境0.2)

    2023-08-28
    157

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注