Vue中v-model的原理

v-model是Vue中的一个语法糖,结合了value属性和input事件,用于实现数据的双向绑定。在自定义组件中使用v-model,需确保组件接收value并抛出input事件。Vue的model机制简化了表单数据绑定的代码,提高了可读性和效率,使得数据视图同步更加便捷。文章通过示例展示了在父组件和子组件间如何利用v-model进行数据传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:

v-model本质上是一个语法糖。例如应用在输入框上,就是value属性和input事件的合写

作用:

提供数据的双向绑定

数据变,视图跟着变

视图变,数据跟着变

注意:

$event用于在模板中,获取事件的形参

在自定义组件中使用v-model

Vue中规定自定义组件要想使用v-model,保证自定义组件接收value,抛出input事件

如果想要不抛出input事件,可以设置model属性

在Vue中,model是指将表单控件的值与组件实例的数据模型绑定起来的一种机制。通常情况下,我们将表单控件的值存储在组件实例的data对象中,然后通过v-model指令将视图上的表单控件和该属性绑定起来,从而实现数据的双向绑定。

这样做有以下几个好处:

  1. 简化代码 使用v-model指令可以非常方便地实现表单数据的绑定,而不需要手动监听每个表单控件的变化事件和触发组件实例的数据更新方法,大大简化了编写表单交互逻辑的代码量。
  2. 提高可读性 采用v-model指令的方式,可以让代码的意图更加明确和易于理解,尤其是对于复杂的表单场景,使用v-model可以避免代码过于冗长和难以维护的情况。
  3. 实现数据双向绑定 由于Vue采用了响应式编程的方式,因此使用v-model指令可以实现数据的双向绑定,即当表单控件的值变化时,组件实例的数据相应地自动更新;反之,当组件实例的数据变化时,表单控件的值也随之自动更新,从而达到更加灵活和高效的数据交互。

总之,Vue中的model机制是实现表单数据绑定和数据双向绑定的关键机制,为我们编写更加简洁、易读和强大的表单交互代码提供了帮助。

父组件:

<template>
  <div>
    <input type="text" :value="newValue" @keyup.enter="change" @input='msg = $event.target.value' >
    <button @click="change">点击提交数据</button>
    <span>您下面的数据选择了:{{ city }}</span>
    <div>
      这里是留言的内容:
      {{ msg }}
    </div>
    <son :checked ='city' @ch="city = $event" v-model="city"></son>

    </div>
</template>

<script>
import son from './components/VMdel/son.vue'
// v-model的原理是语法糖就是在文本上v-bind绑定value值,然后监听input事件
export default {
  data(){
    return{
      value:'',
      msg:'我是默认值',
      newValue:'',
      city:'2'
    }
  },
  components:{
    son,
  },
  methods:{
    change(){
      this.msg = this.value
      this.value = ''
    },
    newV(val){
      this.city = val
    }
  }
}
</script>

 子组件

<template>
  <div>
    <select :value="checked"  @change="change">
      <option value="1">北京</option>
      <option value="2">武汉</option>
      <option value="3">南京</option>
      <option value="4">西安</option>
      <option value="5">青岛</option>
    </select>
    <!-- <button @click="change">点击修改导航</button> -->
  </div>
</template>

<script>
export default {
  props:['checked'],
  data(){
    return{
      // val:this.checked
    }
  },
  model:{
    prop:'checked',
    event:'ch'
  },
  methods:{
    change(e){
      this.$emit('ch',e.target.value)
      // console.log(this.val);
    }
  }
}
</script>

表单类组件封装& v-model简化代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值