• Element UI + VUE + datetimerange + el-date-picker + computed 实现开始结束时间联动


    背景

    Element UI + VUE + datetimerange + el-date-picker + computed 实现开始结束时间联动

    做web管理台时经常需要使用像开始结束时间控件,如:
    这样的

    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    在element ui 控件中是一个model:value2 ; 但是后端给的接口却是这样的:
    在这里插入图片描述

    同理还有:first name 、last name 、full name

    容易使用的方法

    1. set 方法:直接在表单提交的时候,将一个赋值拆成两个值,然后再传给form表单,达到兼容
    2. get 方法:在页面渲染时获取到表单中start 、 end 时间,将其组装到控件的model :value2

    这种是我们比较容易想到,也能实现的方法。但是这种实现属实有点low了 ,可以试试下面的computed方式,来收拢到一个变量计算中实现

    computed 实现方法

    
            
              
                
                
              
            
          
    
    export default {
      name: 'activeRangeComponent',
      props: {
        title: {
          type: String,
          default: '标题'
        }
      },
      data () {
        return {
        
          pickerOptions: {
            shortcuts: [{
              text: '最近一周',
              onClick (picker) {
                const end = new Date()
                const start = new Date()
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
                picker.$emit('pick', [start, end])
              }
            }, {
              text: '最近一个月',
              onClick (picker) {
                const end = new Date()
                const start = new Date()
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
                picker.$emit('pick', [start, end])
              }
            }, {
              text: '最近三个月',
              onClick (picker) {
                const end = new Date()
                const start = new Date()
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
                picker.$emit('pick', [start, end])
              }
            }]
          }, 
          infoForm: {
            id: null,
            name: null,
            startTime: null,
            endTime: null
          }
        }
      },
      computed: {
        timeRange: {
          get () {
            console.log('new get ')
            return [this.infoForm.startTime, this.infoForm.endTime]
          },
          set (newVal) {
            console.log('new set ', newVal)
            this.infoForm.startTime = dateChange.dateFormat(newVal[0], null)
            this.infoForm.endTime = dateChange.dateFormat(newVal[1], null)
          }
        }
      },
      methods: {
      },
      mounted () {
      },
      filters: {}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    这样就可以监听,同时绑定双方的关系,提交表单时,表单model也是更新后的值,dateChange.dateFormat这里是日期格式化函数~~

    最后贴一下官方讲解

    https://v2.cn.vuejs.org/v2/guide/computed.html

    除此之外,如果你仅需要getter 的话也是可以的,computed 默认就是提供getter的,比如像这样:

    
    var vm = new Vue({
      el: '#demo',
      data: {
        firstName: 'Foo',
        lastName: 'Bar'
      },
      computed: {
        fullName: function () {
          return this.firstName + ' ' + this.lastName
        }
      }
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    Python顺序表
    Python(一)
    Python编程:容器总结-字符串、列表、元组、字典、集合
    Java项目:SSM自习室图书馆座位预约管理系统
    月是故乡明,每逢佳节倍思亲,近乡情更怯
    SpringCloud Gateway如何设置keep-alive
    Java对象内存分配流程
    Ruoyi若依前后端一体项目整合cas单点登录
    Redis最佳实践(上)
    华为配置WLAN外置Portal认证实验
  • 原文地址:https://blog.csdn.net/qq_35530042/article/details/126256075