vue 自定义组件实现v-mode

  1. 有时候我们需要对自定义的组件实现v-model的双向绑定

  2. 首先我们得知道v-model的原理
    v-model实际是v-bind和v-on的语法糖的写法

    语法糖v-model的写法

    <input v-model='value' /> 
    

    不使用语法糖

    <input v-bind:value='value' v-on:input='value = $event.target.value' /> 
    

所以我们封装自己的组件就可以利用这点来封装

实现方式1:

<template>
  <div>
    <input
      type="text"
      :value="value"
      @input="inputEvent"
    >
  </div>
</template>

<script>
export default {
  model: { // 自定义组件实现v-model必须要 model 属性
    prop: 'value', // prop 就是 props 传的数据
    event: 'change1', // event 的值要和 $emit 派发的事件名一致
  },
  props: {
    value: {
      type: [String, Number],
      default: ''
    }
  },
  data() {
    return {
    };
  },
  methods: {
    inputEvent(val) {
      this.$emit('change1', val.target.value);
    }
  }
};
</script>

<style scoped>
</style>



实现方式二

<template>
  <div>
    <input
      type="text"
      :value="value"
      @input="inputEvent"
    >
  </div>
</template>

<script>
export default {
  props: {
    value: { // 必须接收value属性
      type: [String, Number],
      default: ''
    }
  },
  data() {
    return {
    };
  },
  methods: {
    inputEvent(val) {
      this.$emit('input', val);
      this.$emit('change', val);
    }
  }
};
</script>

<style scoped>
</style>

然后在组件中使用

<template>
	<BaseVue v-model="value1" />
</template>

<script>
	import BaseVue from './base.vue'
	export default {
		components: {
			BaseVue 
		},
		data() {
			return {
				value1: '99'
			}
		}
	}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值