【Vue原理】VModel - 源码版 之 表单元素绑定流程

本文深入探讨Vue 2.5.17版本中v-model的实现原理,涵盖input、textarea、select、checkbox、radio等表单元素的绑定流程,包括如何设置初始值、绑定事件及双向数据同步。通过简化源码,帮助读者理解v-model的内部工作机制。
摘要由CSDN通过智能技术生成

写文章不容易,点个赞呗兄弟
专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧
研究基于 Vue版本 【2.5.17】

如果你觉得排版难看,请点击 下面链接 或者 拉到 下面关注公众号也可以吧

【Vue原理】VModel - 源码版 之 表单元素绑定流程

今天讲解 v-model 的源码版。首先,兄弟,容我先说几句

image

v-model 涉及源码很多,篇幅很长,我都已经分了上下 三篇了,依然这么长,但是其实内容都差不多一样,但是我还是毫无保留地给你了。你知道我这篇文章写了多久,一个多星期啊,不是研究多久啊,是写啊写啊,不停地修修改改,一直在想如何才能讲明白

image

如果你做好了十足的学习准备,会对你事半功倍,如果你只是看看,请看白话版吧,不然估计会越看越烦…

如果你看过白话版,估计你会了解今天内容的大概,也能很快就入戏

今天讲解不同表单元素的Vue是如何处理的,表单元素有

input、textarea、select、checkbox、radio 五大种

所以,我们把每个表单元素当做一个模块,然后每个模块解决三个问题的流程,来开始我们今天的表演

1、v-model 如何绑定表单值

2、v-model 如何绑定事件

4、v-model 如何双向更新

TIP

下面所有涉及到的源码,为了方便理解,都是简化过的,因为源码太长,所以只保留主要思想,去掉了很多兼容处理以及错误处理


v-model 指令的处理

我们现在假设模板的解析已经到了 解析 v-model 的部分…

Vue 会调用 model 方法 来解析 v-model ,这个方法里面,针对不同的表单元素,再调用不同的专属方法进行深度解析

function model(el, dir) {    

    var value = dir.value;     
    var tag = el.tag;    
    var type = el.attrsMap.type;    

    if (tag === 'select') {
        genSelect(el, value);
    } 
    else if (tag === 'input' && type === 'checkbox') {
        genCheckboxModel(el, value);
    } 
    else if (tag === 'input' && type === 'radio') {
        genRadioModel(el, value);
    } 
    else if (tag === 'input' || tag === 'textarea') {
        genDefaultModel(el, value);
    }
}

你也看到了,上面每种表单元素都会使用一个方法来特殊照顾,不过这些方法,作用大致一样

1、给表单元素设置绑定值

2、给表单元素设置事件及回调

所以这里,我们把方法的都设计到的方法以及流程说一下

插播上面的el 是什么?

el 是 ast,而我的理解就是解析模板后,用树结构来表示某个dom节点,这里先不用深究,你就只要知道他是保存解析模板后所有的数据,包括你绑定的事件,绑定的指令,绑定的属性等等,一张图看下

image

下面所有的处理都是以 el 为基础的

表单元素设置绑定值

什么叫设置绑定值?

首先,比如你给表单元素设置 v-model =“name”,name 是 内部数据吧,所以要把 name 和 表单元素 两个紧紧绑定起来,方便后面进行双向更新

这里讲的是每个表单元素绑定值的流程

他们都会调用 addProp 去保存绑定的属性 然后 绑定属性,流程一样,所以提出来讲,但是具体绑定什么属性,每种元素都不尽相同,在下面表单元素模块会详解

1、调用 addProp,把 value 添加进 el.p

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值