自定义组件实现v-model————vue2

  • 要使自定义的Vue组件支持v-model,需要实现一个名为value的prop和一个名为input的事件。
  • 在组件内部,将value prop 绑定到组件的内部状态,然后在对内部状态进行修改时触发input事件。

自定义UI组件

<template> 
  <input :value="value" @input="change" />
</template>

<script>
export default {
  name: 'MyInput',
  props: {
    value: String
  },
  methods:{
  	change(e){
		this.$emit('input', e.target.value)
	}
 }
};
</script>


使用组件

<template>
  <div>
    <my-input v-model="message" /> 
  </div>
</template>

<script>
import MyInput from './MyInput.vue';

export default {
  components: {
    MyInput
  },
  data() {
    return {
      message: ''
    };
  },

};
</script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Vue实现自定义组件的双向绑定(v-model),你可以使用`model`选项。下面是一个简单的例子,演示如何创建一个自定义组件并将其包装在v-model中使用: ```html <!-- 父组件 --> <template> <div> <custom-input v-model="message"></custom-input> <p>Message: {{ message }}</p> </div> </template> <script> import CustomInput from './CustomInput.vue'; export default { components: { CustomInput }, data() { return { message: '' } } } </script> ``` ```html <!-- CustomInput.vue --> <template> <input :value="value" @input="$emit('input', $event.target.value)"> </template> <script> export default { props: ['value'] } </script> ``` 在上面的例子中,父组件通过`v-model="message"`将`message`作为属性传递给子组件`CustomInput`。子组件接收该属性作为`value`,并在输入事件触发时通过`$emit('input', $event.target.value)`将新的值传递回父组件。 这样,当用户在子组件中输入文本时,父组件的`message`属性会自动更新,实现了双向绑定。 请注意,使用`v-model`时,子组件内部的属性名必须为`value`,而不是其他名字。这是因为`v-model`默认会使用`value`作为属性名来传递值,并使用`input`事件来更新值。如果你想要使用不同的属性名,可以在子组件中使用`model`选项来自定义。 ```html <!-- CustomInput.vue --> <template> <input :value="internalValue" @input="updateValue($event.target.value)"> </template> <script> export default { model: { prop: 'customValue', event: 'customInput' }, props: { customValue: String }, computed: { internalValue: { get() { return this.customValue; }, set(newValue) { this.$emit('customInput', newValue); } } }, methods: { updateValue(value) { this.internalValue = value; } } } </script> ``` 通过在子组件中使用`model`选项,你可以自定义属性名和事件名,以实现更灵活的双向绑定。在上面的例子中,父组件可以这样使用: ```html <custom-input v-model="message"></custom-input> ``` 这会将父组件的`message`属性传递给子组件的`customValue`属性,并使用`customInput`事件来更新值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小曲曲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值