js pug 代码_PUG 系列 | 第二课 JS 代码混合、包含引入
首先要说明,文章当中涉及几处翻译,都是笔者根据自己的理解妄自命名的,如果读者有更好的理解,欢迎在评论中讨论。
====================
在这一课当中,我们要进行两个知识点的学习,根据标题可能不能很好懂得其含义,我们先做一个简单的理解: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 代码混合、包含引入相关推荐
- 【Methodot低代码教程系列03】——零代码十分钟制作电影票房管理后台
Methodot低代码教程系列第三课来啦! 本期课程详细视频戳这里>https://www.bilibili.com/video/BV1644y177Yy?spm_id_from=333.999 ...
- 区块链基础知识系列 第二课 区块链共识算法
共识算法解决的是对某个提案(proposal)大家达成一致意见的过程. PBFT (拜占庭容错)算法 -Fabric 0.6采用 五个阶段:request,预准备(pre-prepare).准备(pr ...
- Hyperledger Fabric 1.0 实战开发系列 第二课 Fabric环境搭建
一.安装GO语言 下载最新版的go 打开Terminal,输入命令(以下命令都是以root管理员的角色进行的) su 输入密码:***** wget https://storage.googleapi ...
- 吴恩达Deeplearning第二课代码bug修正大全
解决维度不匹配问题 第一周 Initialization 错误: plt.title("Model with Zeros initialization") axes = plt.g ...
- 博客第二课-静态主页
上一课为大家介绍了网页最基本的框架,这一篇我们将扩展上次的框架带大家定制博客的静态主页.什么叫静态页面,从字面上就很好理解,即内容不会动态改变的网页,和用户也没有任何交互,静态页面是动态网页的基础,下 ...
- Python-opencv学习第二课:图像色彩
Python-opencv学习第二课:图像色彩 文章目录 Python-opencv学习第二课:图像色彩 一.学习内容 二.代码部分 NOTES:上一课代码改善(第一课) 1.引入库(第二课内容开始) ...
- [转载]用UglifyJS2合并压缩混淆JS代码——javascript系列
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...
- [007]爬虫系列 | 猿人学爬虫攻防大赛 | 第二题: js 混淆 - 动态Cookie
一.题目 链接: <猿人学爬虫攻防大赛 | 第二题: js 混淆 - 动态Cookie> 二.分析 按照以往习惯,我们先按F12打开控制台,Network抓包,勾选preserve log ...
- 【javascript基础——系列10】js中隐藏元素的几种方法以及代码
系列文章 [javascript基础--系列1]前端页面ajax连接后台服务器传输数据 [javascript基础--系列2]前端页面axios连接后台服务器传输数据 [javascript基础--系 ...
- 一步步带你做vue后台管理框架(二)——上手使用 系列教程《一步步带你做vue后台管理框架》第二课
github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 <一步步带你做vue后台管理框架>第二课:上手使 ...
最新文章
- 11个让你吃惊的Linux终端命令
- Linux下查看文件占用空间大小的du 和df 命令
- go gorm框架一对多查询代码示例
- 设计模式在Netty中的应用-责任链模式源码举例
- java json转xml_关于JSON与XML的区别比较
- 解决 sessionStroage 无法在多个标签页共享数据的问题
- libjpeg移植到arm
- pathinfo函数获取非UTF-8字符集文件名的问题
- 小型自动化运维--expect脚本之传递函数
- 阿里云资深技术专家何勉:研发效能提升的系统方法
- python读取math_python调用通达信公式,python读取通达信公式结果
- 小米5s安装xpose 上
- 身份证号判断是否合法(具体代码)
- 树状分支图的html如何编写,流程图控件GoJS教程:树状图的分支设置
- 计算机中常见的循环,电脑系统提示数据错误循环冗余检查的解决方法教程[多图]...
- os 安装 php redis,Mac Xamp安redis及安装php-redis扩展
- 宏基微型计算机机箱怎么打开,机箱也智能 自己动手打造自动温控机箱
- 加州大学圣地亚哥分校计算机科学排名,加州大学圣地亚哥分校UCSD计算机科学Computer Science专业排名第37位(2021年THE世界大学商科排名)...
- 防火墙安全策略防火墙安全区域的划分
- 机械键盘用哪种轴的好?