写在前面
本篇是从零实现 vue2 系列第七篇,在 YourVue 中实现 v-if 和 v-for。
代码仓库:https://github.com/buppt/YourVue
正文
在之前的 main.js
中加入这两个指令
<div v-if="count===1">count === 1</div>
<div v-else-if="count===2">count === 2</div>
<div v-else>count != 1 && count != 2</div>
<div v-for="(item, key, index) in items">
<p>{
{item}}</p>
</div>
v-if
vue 在 parse 阶段,遇到 v-if 会执行下面的函数,
function processIf (el) {
var exp = getAndRemoveAttr(el, 'v-if'); //获取 if 表达式
if (exp) {
el.if = exp; //增加 if 属性
addIfCondition(el, { // 增加 ifConditions 属性,属性值是一个对象
exp: exp, // exp 表示当前 v-if 的值
block: el // block 是当前 ast 对象的引用
});
} else {
if (getAndRemoveAttr(el, 'v-else') != null) { //增加 el.else 属性
el.else = true;
}
var elseif = getAndRemoveAttr(el, 'v-else-if'); //添加 elseif 属性
if (elseif) {
el.elseif = elseif;
}
}
}
function addIfCondition (el, condition) { //增加 ifConditions 属性
if (!el.ifConditions) {
el.ifConditions = [];
}