在vue中使用v-model实现数据双向绑定

用v-model实现数据的双向绑定,主要用于父子组件中,其中可作用于表单元素,如inputtextareaselect

1.v-model实现原理

v-model其实是语法糖,把背后两个操作合并为一个指令

 <input type="text" v-model="value">
 <!-- 等同于 -->
 <input type="text" :value="value" @input="value =$event.target.value">
2.在父子组件中实现数据的双向绑定

父组件

<template>
 <div class="Home">
   <v-model v-model="value" ></v-model>
    <!-- 等同于 -->
   <!-- <v-model :value="value" @input="value =$event.target.value"></v-model> -->
   <div>{{value}}</div>
 </div>
</template>

子组件

<template>
  <div class="VMoldel">
    <input :value="value" @input="onInput" />
  </div>
</template>

<script>
export default {
  name: 'VMoldel',
  props: {
    value: String
  },
  methods: {
    onInput (e) { //调用父组件的input方法。
      this.$emit('input', e.target.value)
    }
  },
}
</script>
3.使用model

一个组件上的 v-model 默认会利用名为 valueprop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value attribute 用于不同的目的。model 选项可以用来避免这样的冲突:

不修改父组件,在子组件中使用model

<template>
  <div class="VMoldel">
    <input :value="changeValue" @change="onChange" />
    <button>添加</button>
  </div>
</template>

<script>
export default {
  name: 'VMoldel',
  props: {
    changeValue: String
  },
  model: { //props和event可任意修改,元素input的change和input方法的区别只在于组件
    props: 'changeValue',
    event: 'change'
  },
  methods: {
    onChange (e) { //调用父组件的change方法。
      this.$emit('change', e.target.value)
    }
  },
}
</script>
4.结语

真正的使用双向绑定会给维护带来一定的困难,所以推荐使用 .sync修饰符,可查看使用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值