v-model原理及自定义组件上的实现

一提到v-model就会想到数据的双向绑定,但其实现原理又是什么呢?

在原生表单中:

<input type="text" v-model="name">

相当于:(先给input绑定value属性值为数据name,然后给input绑定input事件将其input的value值赋给数据name

<input type="text" :value="name" @input="name = $event.target.value">

在自定义组件中:

要在字符串模板中使用上述的第二种方式来实现v-model。

<div id="demo">
   <test v-model="name"></test> 
   <input type="text" v-model="name" >
   <p>{{name}}</p>
   <button @click="ccc">按钮</button>
</div>
Vue.component("test",{
  //props 当一个值传递给一个 prop 特性的时候,它就变成了那个组件实例的一个属性
  //v-model 绑定的就是 input等表单元素的value、
  //因此此组件中的prop必为value
  props:['value'],
  template:`
  <input
  v-on:input="$emit('input', $event.target.value)"
  v-bind:value="value"
  >`
})

new Vue({
  el:"#demo",
  data:{
    name:"你好",
  },
  methods:{
    ccc:function(){
      this.name = "世界";
    }
  }
})

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值