八小时实现迷你版vuejs四:实现compile和Directive

本文详细介绍了如何实现一个迷你版VueJS的事件绑定功能,包括compileDirectives方法、Directive类以及v-on自定义指令的创建过程。通过遍历DOM,解析attributes,生成descriptors列表,然后在bind阶段创建Directive实例。文中给出了关键代码示例,简化了处理逻辑,适合初学者理解VueJS指令系统的运作机制。
摘要由CSDN通过智能技术生成

这一篇,我们要实现一个事件绑定的功能:

<div @click=“sayHello”></div>

那么为了实现这个功能,我们需要三步:
1. 实现 compileDirectives 方法, 可以从attrs中读取directive的配置,这里称之为 descriptor
2. 实现Directive类
3. 实现一个自定指令: v-on

v-on 为例,如果碰到这样一个属性 v-on:click=“hello” 指令的初始化流程如下?
1. 遍历DOM
2. 对其中每一个Element,获取所有的attributes
3. 遍历 attributes,如果name以 v-on 开头,那么就是一个绑定事件的指令,我们把相关的配置都存在 descriptor 中
4. 遍历DOM结束,得到一个 descriptors 列表,其中存放了我们创建directive时需要的所有参数,比如name, value, el 等
5. 在 bind 阶段,遍历 descriptors
6. 对每一个descriptor,创建一个Directive
7. bind 结束,directive 初始化完成。

关于watcher的实现以及如何在directive中监听数据的变动,我们放到下一章来讲。

compileDirectives

在vue v1.0 版本及以前,是通过DOM API直接获取attributes的,并通过对name的匹配来判断是哪一类directive。在vue2中显然是通过virtual DOM的API来做的。

那么我们按照上面的步骤来说,compileDirectives 负责其中 1-4 步,即从attributes中生成一个 descriptors 列表:

const onRE = /^v-on:|^@/
const modelRE = /^v-model/
const textRE = /^v-text/
const dirAttrRE = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值