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

这一篇,我们要实现一个事件绑定的功能:
那么为了实现这个功能,我们需要三步: 1. 实现 compileDirectives 方法, 可以从attrs中读取directive的配置,这里称之为 descriptor 2. 实现Directive类 3. 实现一个自定指令: v-on以 v-on 为例,如果碰到这样一个属性 v-on:cli
摘要由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 = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值