首先要说明,文章当中涉及几处翻译,都是笔者根据自己的理解妄自命名的,如果读者有更好的理解,欢迎在评论中讨论。

====================

在这一课当中,我们要进行两个知识点的学习,根据标题可能不能很好懂得其含义,我们先做一个简单的理解:JS 代码混合 (Code)

在这一功能特性下, JavaScript 代码将被混合在 pug 文件当中,并且在编译阶段就被执行,利用了静态解释模板中的 JavaScript 语句的特性来实现对代码的预处理,从而简化模板的编写操作。常常使用的就是控制语句和循环语句。

包含引入 (Include)

包含引入功能可以把其他文本文件当中的内容原封不动引入当前 pug 文档当中,构建高度复用的 pug 代码,提高资源的利用率。如果一套页面使用了完全相同的结构(有如 http://ASP.NET Web Forms 当中的母版),那么使用这一 pug 特性就能大幅节省开发成本了。

重要提示:在这一课当中,需要具备一定的拓展能力,请尽量在电脑上阅读,因为文末的 CodePen 链接能让你在其中动手修改,实现对三大特性的深入理解。由于微信平台不支持文章中使用外部超链接,故文末列举所有 CodePen 链接,用于进行实验。

第一部分 JS 代码混合

代码混合分为三类:非字面表达式 Unbuffered Code

转义式字面表达式 Escaped Buffered Code

非转义式字面表达式 Unescaped Buffered Code

(上述翻译为个人理解后取名,便于理解,但不代表官方翻译)

第一类,表达的就是:执行代码,但是不会将返回值以字面值得形式返回给当前的上下文。比如下述代码:

var name = "Ruiqi";

"My name is " + name; // A行;

当代码全部执行后,A行会返回一个字面值 “My name is Ruiqi”,而有的时候我们又不允许 pug 在执行某段代码的时候将字面值返回,比如 for 语句,此时就需要使用 ‘-’(dash) 来标记后面所接的一段是非字面表达式。否则,将会导致编译器错误。

而当需要使用字面表达式的时候呢,就需要用引导符号 ‘=’ 和 ‘!=’ 分别表示第二类转义式字面表达式和第三类非转义式字面表达式了。以 ‘=’ 为例,它会要求编译器将后面的字面表达式的值,作为纯文本引入到当前上下文当中,它与 ‘|’ 的区别仅仅在于 ‘=’ 连接产生字面值的表达式,而 ‘|’ 连接完全的显式字面表达式。读到这里,请打开 CodePen 链接1 找到 “Section A” 来进行在线的实验,如上图。

操作时,请尝试去掉 for 语句前的 dash 符号,看看是否会出现错误,或者尝试改变缩进量。值得引起注意的是,for 语句是不可以放入一个 dash 符号引导的代码块的,必须另外起行:

// wrong

-

var array = ["wyy,"wzy","yhq","wrq"];

for (var i =0;i<3;i++)

li= array[i]

在上述代码编译时,编译器会抛出异常,需要改写成下面这种形式:

// correct

-

var A = "abc"+"def";

var B = A + "ddd";

each ele in A

li= ele

// another one

-

var A = "abc"+"def";

var B = A + "ddd";

- for (var i=0;i<3;i++)

li yudan

至于转义和非转义的区别就很简单了,具体可以通过搜索关键字 HTML符号转义 来了解。

第二部分 包含引入

正如前面介绍的,包含引入的概念在模板化开发当中有着非常重要的意义。此处举两个例子:代码复用

现在我们已经有了 A 页面,它搭建了一套框架,包含页面的导航、菜单和底部。而新开发的 B 页面恰好需要使用 A 定义的这套框架。通常我们会把 A 当中的内容复制到 B 当中,这没毛病,而且很简单易行。但是问题恰恰不在这里,问题就出在维护的时候。如果后期项目更新,设计更改,A 定义的框架要进行更新,那么所有使用其定义的页面都需要更新,当需要更改的页面太多,必然会导致效率降低,甚至出现大量的纰漏,这是非常可怕的。所以,我们需要像引入一个头文件那样,用引用关系来构建高度复用的代码。

功能延展

现在有一个项目,每个 pug 文件都需要配置一段预制的代码,比如

标签当中的 和 、

js pug 代码_PUG 系列 | 第二课 JS 代码混合、包含引入相关推荐

  1. 【Methodot低代码教程系列03】——零代码十分钟制作电影票房管理后台

    Methodot低代码教程系列第三课来啦! 本期课程详细视频戳这里>https://www.bilibili.com/video/BV1644y177Yy?spm_id_from=333.999 ...

  2. 区块链基础知识系列 第二课 区块链共识算法

    共识算法解决的是对某个提案(proposal)大家达成一致意见的过程. PBFT (拜占庭容错)算法 -Fabric 0.6采用 五个阶段:request,预准备(pre-prepare).准备(pr ...

  3. Hyperledger Fabric 1.0 实战开发系列 第二课 Fabric环境搭建

    一.安装GO语言 下载最新版的go 打开Terminal,输入命令(以下命令都是以root管理员的角色进行的) su 输入密码:***** wget https://storage.googleapi ...

  4. 吴恩达Deeplearning第二课代码bug修正大全

    解决维度不匹配问题 第一周 Initialization 错误: plt.title("Model with Zeros initialization") axes = plt.g ...

  5. 博客第二课-静态主页

    上一课为大家介绍了网页最基本的框架,这一篇我们将扩展上次的框架带大家定制博客的静态主页.什么叫静态页面,从字面上就很好理解,即内容不会动态改变的网页,和用户也没有任何交互,静态页面是动态网页的基础,下 ...

  6. Python-opencv学习第二课:图像色彩

    Python-opencv学习第二课:图像色彩 文章目录 Python-opencv学习第二课:图像色彩 一.学习内容 二.代码部分 NOTES:上一课代码改善(第一课) 1.引入库(第二课内容开始) ...

  7. [转载]用UglifyJS2合并压缩混淆JS代码——javascript系列

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  8. [007]爬虫系列 | 猿人学爬虫攻防大赛 | 第二题: js 混淆 - 动态Cookie

    一.题目 链接: <猿人学爬虫攻防大赛 | 第二题: js 混淆 - 动态Cookie> 二.分析 按照以往习惯,我们先按F12打开控制台,Network抓包,勾选preserve log ...

  9. 【javascript基础——系列10】js中隐藏元素的几种方法以及代码

    系列文章 [javascript基础--系列1]前端页面ajax连接后台服务器传输数据 [javascript基础--系列2]前端页面axios连接后台服务器传输数据 [javascript基础--系 ...

  10. 一步步带你做vue后台管理框架(二)——上手使用 系列教程《一步步带你做vue后台管理框架》第二课

    github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 <一步步带你做vue后台管理框架>第二课:上手使 ...

最新文章

  1. 11个让你吃惊的Linux终端命令
  2. Linux下查看文件占用空间大小的du 和df 命令
  3. go gorm框架一对多查询代码示例
  4. 设计模式在Netty中的应用-责任链模式源码举例
  5. java json转xml_关于JSON与XML的区别比较
  6. 解决 sessionStroage 无法在多个标签页共享数据的问题
  7. libjpeg移植到arm
  8. pathinfo函数获取非UTF-8字符集文件名的问题
  9. 小型自动化运维--expect脚本之传递函数
  10. 阿里云资深技术专家何勉:研发效能提升的系统方法
  11. python读取math_python调用通达信公式,python读取通达信公式结果
  12. 小米5s安装xpose 上
  13. 身份证号判断是否合法(具体代码)
  14. 树状分支图的html如何编写,流程图控件GoJS教程:树状图的分支设置
  15. 计算机中常见的循环,电脑系统提示数据错误循环冗余检查的解决方法教程[多图]...
  16. os 安装 php redis,Mac Xamp安redis及安装php-redis扩展
  17. 宏基微型计算机机箱怎么打开,机箱也智能 自己动手打造自动温控机箱
  18. 加州大学圣地亚哥分校计算机科学排名,加州大学圣地亚哥分校UCSD计算机科学Computer Science专业排名第37位(2021年THE世界大学商科排名)...
  19. 防火墙安全策略防火墙安全区域的划分
  20. 机械键盘用哪种轴的好?

热门文章

  1. 编程语言的宗教狂热和十字军东征 (转)
  2. linux系统github全局加速
  3. FireFox浏览器渗透测试插件
  4. 弹性容器中 子元素的flex属性介绍
  5. 北京科技大学计算机复试面试,北京科技大学考研复试
  6. Rush Leetcode
  7. json转换成图片工具类
  8. java设计模式学习-代理模式
  9. 和NeroBlack合作的流体教学在AboutCG发布
  10. 3GPP Release和Category简介