源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

浅谈 Vue v-model指令的实现原理

  • 时间:2020-02-28 00:21 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅谈 Vue v-model指令的实现原理
vue的v-model是一个十分强大的指令,它可以自动让原生表单组件的值自动和你选择的值绑定, 我们来看一下它的效果: 输入框的值和一个数据是绑定的,输入框的值变化,和他绑定的值也会发生变化 我们可以参照官方文档的例子    [url=http://cn.vuejs.org/v2/guide/forms.html]http://cn.vuejs.org/v2/guide/forms.html[/url]#文本 [img]http://files.jb51.net/file_images/article/201706/2017060816225046.gif[/img] 我们在手动输入 hello的过程中 下面和他绑定的p标签的值也是实时变化的 如此神奇的效果是如何实现的呢? 还是参照官方文档 [url=http://cn.vuejs.org/v2/guide/components.html]http://cn.vuejs.org/v2/guide/components.html[/url]#使用自定义事件的表单输入组件 [img]http://files.jb51.net/file_images/article/201706/2017060816225047.png[/img] 官方也说明了,v-model只不过是一个语法糖而已,真正的实现靠的还是 [list=1] [*]v-bind:绑定响应式数据[/*] [*]触发 input 事件 并传递数据 (核心和重点)[/*] [/list] 现在我们也想设计自己的表单组件,也想通过 v-model暴露组件的值,怎么做呢? 例如我们要设计一个 自定义货币输入的组件, 通过 v-model暴露组件的值,我们可能使用如下的组件代码
<currency-input v-model="price"></currency-input>
然后再使用 这个我们自己定义的组件时, 组件内部会暴露出 组件的值到 v-model所绑定的值中去;那它是如何实现的呢?\ 要搞明白v-model的实现,需要通过查看官方的自定义v-model组件示例的部分代码来进行说明 [img]http://files.jb51.net/file_images/article/201706/2017060816225048.png[/img] 我们看上图中的代码,有行  $emit的代码,这行代码实际上会触发一个 input事件, 'input'后的参数就是传递给v-model绑定的属性的值,也就是说 v-model实现自定义的数据绑定的原理是这样的: 首先,大体的组件结构:
<custom-comp v-model="myattr">
  <input /> ??
  <select> ?? 
</custom-comp>
也就是自定义的组件内部一般包含原生的表单组件(当然非表单的组件也可以) 然后,给原生控件绑定事件,捕捉到原生组件的值,利用 $emit方法,触发input方法,组件监听到 input事件然后把值传入到myattr中. 这里有个疑问,为什么是 'input'呢??? 三个字,看文档! 这个就是 vue对 v-model实现的一个规则: 使用了v-model的组件会 自动监听 input 事件,并把这个input事件所携带的值 传递给v-model所绑定的属性!这样组件内部的值就给到了父组件了 通过以上讲解,我们总结一下如何利用v-model实现自定义的表单组件: 监听原生组件的事件,当获取到原生组件的值后把 值通过调用 $emit('input' ,data) 方法去触发 input事件  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部