vue源码解析学习笔记-1:模板引擎-mustache.js

584 阅读2分钟

写在前言:我在b站学编程,这次笔记来源于Vue源码解析系列课程_哔哩哔哩_bilibili,侵删!!

1.什么是模板引擎

模板引擎是将数据变视图的最优雅的解决方案

image.png

但是这节课并不是学v-for,这节课学习的是mustache

![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/76b5e53cbdc24a56b5540fe3fcb90923~tplv-k3u1fbpfcp-watermark.image)


mustache:胡子,{{}}最早的模板引擎库

image.png

参数1:模板字符串 参数2:数据

遇到的第一个问题

在引入mustache.js之后遇到如下问题:

652a42ba37e906b926dd138ecbb268b.png 根本原因:Node和浏览器端所支持的模块规范不同。

image.png

image.png 图源:blog.csdn.net/weixin_4081… 侵删

解决方案:将mustache.js最后一行代码由export default mustache;更改为module.export =mustache;解决,但是出现了新的问题:498751cdc33f363faf08960a5772774.png
在这里发现到不对劲的地方了,于是最后才明白问题在哪里:
(最好的解决方案是,不要跟着博主去bootcdn上直接复制粘贴cdn.bootcdn.net/ajax/libs/m… ,自己去GitHub上拉(地址:github.com/janl/mustac… )并且npm就可以(这一步不可少)也不用改源码(上面的export和export default区别就不用纠结这个啦(贴上来单纯为了学习记忆)) 经此一步得到最终的解决:

image.png

终于进入mustache库的学习了(类似于v-for)
复杂数据类型的循环:

image.png 简单数据类型的循环:

image.png 也可以不循环:

image.png 数组还可以嵌套:

var data = {

    arr:[

        {"name":"小明","age":12,"sex":"男","hobbies":["游泳","王者荣耀"]},

        {"name":"小红","age":12,"sex":"女","hobbies":["吃饭","睡觉"]},

        {"name":"小强","age":12,"sex":"男","hobbies":["打豆豆","搞钱"]}

        ]

}
    但是需要注意的是,在mustache.js的{{}}中,不能进行任何逻辑运算({{1+1}}都不能得到2的结果,是一个逻辑很弱的模板引擎,只能进行简单的数据渲染

此时的渲染方法是(就类似于for中嵌套for):

image.png

布尔值(类似于v-if的用法):

image.png

除了mustache.js模板引擎之外呢,还有神来一笔的模板写法

image.png

    1.<script>标签中的type不为"text/javaScript"就可以,在这里定义为template,使用id进行标识。在这里自定义模板中间存在高亮,能够自动补齐等等,就相当于是一个容器专门用来存储字符串
    2.在使用的时候,直接:

image.png

这个想法太天才了,神来一笔,解决了反引号不好编辑的问题

小tip: {{#arr}}和{{/arr}}必须成对出现