【Vue2】vue2中自定义组件实现双向绑定的写法,v-model在自定义组件中的实现

本文介绍了在Vue中如何在父组件与子组件间使用双向数据绑定,通过`v-model`和`sync`修饰符,以及在子组件中处理prop和watch的实例,展示了如何在`modelValue`属性上实现数据的实时更新。
摘要由CSDN通过智能技术生成

封装一些小组件的时候常常会用到双向数据绑定,下面简单总结一下用法

一、讲解示例

父组件中使用子组件

<template>
  <div>
    <子组件 :对外双向绑定属性名.sync="父组件双向绑定属性名" />
  </div>
</template>
<script>
export default {
  data() {
	return {
		父组件双向绑定属性名: '',
	}
  }
}
</script>

子组件中封装逻辑

<template>
  <div>
    <div v-model="_双向绑定内部过渡属性名"/>
  </div>
</template>
 
<script>
//子组件    
export default {
  data() {
    return {
      _双向绑定内部过渡属性名: "", //中间过渡变量,避免报错referenced during render
    };
  },
  props: ["对外双向绑定属性名"],
  watch: {
    对外双向绑定属性名: {
      handler(newData) {
        this._双向绑定内部过渡属性名 = newData;
      },
      deep: true,
      immediate: true,
    },
    _双向绑定内部过渡属性名(newData) {
      this.$emit(`update:对外双向绑定属性名`, newData);
    },
  },
};
</script>

组件属性双向数据绑定-官方文档

二、实际示例

父组件使用

<customUpload 
 	:modelValue.sync="imagePath" 
 	uploadText="每张最大为8M"
	fileStorageLocation="wxInspection" 
	:showChoosePhoto="false">
</customUpload>

子组件中定义

<template>
  <div>
    <div v-model="_双向绑定内部过渡属性名"/>
  </div>
</template>
 
<script>
//子组件    
export default {
  data() {
    return {
      fileList: [], // 对内:上传的文件列表 {status:success|uploading|fail, url:''}
    };
  },
  props: {
  	// 对外:上传的文件列表 {status:success|uploading|fail, url:''}
	modelValue: {
		type: Array,
		default: () => []
	},
  },
  watch: {
    modelValue: {
		handler: function(newData, oldData) {
			this.fileList = newData;
		},
		immediate: true,
		deep: true
	},
   // 监听文件列表数据长度变化,存在数据则显示预览
	fileList(newData, oldData) {
		this.$emit('update:modelValue', newData);
		this.previewImage = newData.length ? true : false;
	},
  },
};
</script>
  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卸载引擎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值