一、模版解析之大括号表达式的分析
- 大括号表达式: 在
vue
中是比较常见的,通过双大括号{{}}
可以进行插值表达式的读取。
- 模版解析之大括号表达式的实现过程:
- 根据正则对象得到匹配出的表达式字符串: 子匹配
/RegExp.$1 name
- 从
data
中取出表达式对应的属性值
- 将属性值设置为文本节点的
textContent
- 对于大括号表达式的解析过程,简单来说,将大括号表达式中的值取出来,比如
{{ name }}
,将name
的值取出来,根据name
的值找到对应的value
的值,将value
的值插入到文本节点的textContent
中。
- 模版解析之大括号表达式的关键过程:
compileElement: function (el) {
var childNodes = el.childNodes,
me = this;
[].slice.call(childNodes).forEach(function (node) {
var text = node.textContent;
var reg = /\{\{(.*)\}\}/;
if (me.isElementNode(node)) {
me.compile(node);
} else if (me.isTextNode(node) && reg.test(text)) {
me.compileText(node, RegExp.$1);
}
if (node.childNodes && node.childNodes.length) {
me.compileElement(node);
}
});
}
二、模版解析之大括号表达式的实现:
- 大括号表达式的实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>模版解析之大括号表达式_MVVM</title>
</head>
<body>
<div id="test">
<p>{{ name }}</p>
</div>
</body>
<script type="text/javascript" src="./js/mvvm/compile.js"></script>
<script type="text/javascript" src="js/mvvm/mvvm.js"></script>
<script type="text/javascript" src="./js/mvvm/observer.js"></script>
<script type="text/javascript" src="./js/mvvm/watcher.js"></script>
<script type="text/javascript">
new MVVM({
el: "#test",
data: {
name: "张三"
}
})
</script>
</html>
- 关于
vue
的源码分析,我在github
上建立了一个项目,项目地址如下https://github.com/jiuchengTk279/vueSourceCode.git
,欢迎大家访问下载,也希望可以多给予一些建议交流。