调用的子组件中使用v-model绑定数据以及使用@调用方法

实例:

子组件my-date-picker:

javascript 复制代码
<!--
  * @description: 日期组件二次封装
  * 解决 "日期为区间时,后端不支持传数组,而要传#分割的字符串" 
-->
<template>
  <el-date-picker
    class="comp-my-date-picker"
    v-model="date"
    v-bind="$attrs"
    v-on="$listeners"
    :value-format="valueFormat"
    @change="change"
  ></el-date-picker>
</template>

<script>
export default {
  name: 'my-date-picker',
  model: {
    prop: 'value',
    event: 'customInput'
  },
  props: {
    /** 双向绑定值 */
    value: {
      type: [String, Array],
      default: ''
    },
    /** 当 type = daterange 时,数组拼接字符串所用的分隔符,默认# */
    separator: {
      type: String,
      default: '#'
    },
    /** 双向绑定的值是否转换成以separator分割的字符串 */
    convertToStr: {
      type: Boolean,
      default: true
    }
  },
  watch: {
    value: {
      handler(val) {
        if (val && val.split && val.split(this.separator).length === 2) {
          this.date = val.split(this.separator)
        } else {
          this.date = val
        }
      },
      immediate: true
    }
  },
  computed: {
    valueFormat() {
      return this.$attrs['value-format'] || this.$attrs.type === 'datetime' || this.$attrs.type === 'datetimerange'
        ? 'yyyy-MM-dd HH:mm:ss'
        : 'yyyy-MM-dd'
    }
  },
  data() {
    return {
      date: null
    }
  },
  created() {},
  mounted() {},
  methods: {
    change(val) {
      this.$emit('customInput', Array.isArray(val) && this.convertToStr ? val.join(this.separator) : val)
    }
  }
}
</script>
<style lang="less" scoped></style>

父组件:

html 复制代码
 <my-date-picker
      v-model="searchData.querydate"
      type="daterange"
      start-placeholder="开始时间"
      end-placeholder="结束时间"
      @customInput="search"
   />

提示: 在子组件中使用v-bind="attrs" v-on="listeners"就能够绑定子组件中的所有属性和方法,父组件调用使用它也能够直接使用它的属性和方法。

相关推荐
知识分享小能手4 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
luckys.one4 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
魔云连洲4 小时前
深入解析:Vue与React的异步批处理更新机制
前端·vue.js·react.js
mCell4 小时前
JavaScript 的多线程能力:Worker
前端·javascript·浏览器
weixin_437830946 小时前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr
超级无敌攻城狮6 小时前
3 分钟学会!波浪文字动画超详细教程,从 0 到 1 实现「思考中 / 加载中」高级效果
前端
excel7 小时前
用 TensorFlow.js Node 实现猫图像识别(教学版逐步分解)
前端
前端工作日常7 小时前
我学习到的Vue2.6的prop修饰符
vue.js
gnip7 小时前
JavaScript事件流
前端·javascript
小菜全7 小时前
基于若依框架Vue+TS导出PDF文件的方法
javascript·vue.js·前端框架·json