博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6, Angular,React和ABAP中的String Template(字符串模板)
阅读量:6710 次
发布时间:2019-06-25

本文共 1459 字,大约阅读时间需要 4 分钟。

String Template(字符串模板)在很多编程语言和框架中都支持,是一个很有用的特性。本文将Jerry工作中使用到的String Template的特性做一个总结。

ES6

阮一峰老师有一个专门的网站介绍ES6入门,还出了一本书: 《ECMAScript6标准入门》。

我们来看看ES6里的String Template。

首先看下面这段代码。

复制代码

names是个数组,传入一个箭头函数,针对每个数组原则,构造一个字符串,代表一个p标签页,标签页的内容就为数组元素本身。

在浏览器里打开该html页面,得到下列输出。

我们再来看String Template的解决方案。

复制代码

可以看到String Template的解决方案里,我们只用了一对"`"符号,将字符串模板的内容包起来,而原始的常规方案,使用了两对“”,稍显麻烦。

这个例子本身比较简单,可能体现不出String Template的优势。但在实际项目中,如果字符串模板长度过长或者里面包含的变量很多时,使用常规解决方案就需要很多“”,非常繁琐且容易出错。

Angular框架中的String Template的应用

其实严格意义上来说,Angular框架的{

{}}语法并不能等价于ES6中的字符串模板,只是我个人觉得它们思路类似,所以也放在一起讨论。

看一下这个最简单的Angular例子。

在浏览器里打开它,在Input field里输入一些内容后,这些内容会存储在通过指令ng-model声明的名称为name的模型里。在HTML的正文,通过语法"{

{name}}"将模型name存储的内容显示在浏览器上。

例子本身很简单。然而您有没有好奇过,Angular框架实现,在运行时是如何把{

{name}}替换成name模型包含的实际内容的?

让我们调试一下angular.js的实现,学习一下框架的设计吧。

其实也没有什么高深之处,Angular首先还是会用JavaScript字符串自带的API indexOf去查找字符串内是否包含了startSymbol即{

{, endSymbol即}}。

每一次敲一个字符到Input field时,Angular框架都会响应并进行相应处理。

还是上面的例子,如果我输入单词Jerry,在Chrome开发者工具里会观察到下列的日志:

当然这些日志都是我研究Angular.js时手动添加进去的。我把我加了很多跟踪日志的Angular实现文件放在我的github上了:

String Template in React

React框架里也有类似Angular里的字符串模板的用法,思路类似。下图代码第14行指定了在渲染时要输出的HTML源代码模板,由静态的

Hello

和动态的{ }组成。在渲染的时候,{ }会被替换成Jerry。最后看到的HTML上会显示Hello Jerry。

String Template in ABAP

ABAP是我日常工作使用的编程语言,全称为Advanced Business Application Programming。语法和ES6是几乎完全一致的,只是ES6用成对的"`"来作为String Template开始和结束的标志,而ABAP用“|”。String Template里内部对变量的声明,ES6用的是${}, ABAP用的{}。

看一个具体的例子吧。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

转载地址:http://elalo.baihongyu.com/

你可能感兴趣的文章
少走弯路,中小企业OA选型攻略
查看>>
万能的小苏打,知道的人太少了,赶紧收藏
查看>>
从MWC 2017看懂英特尔5G朋友圈
查看>>
Facebook 的移动端 A/B 测试框架
查看>>
《交互式程序设计 第2版》一2.3.4 运算符
查看>>
CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍
查看>>
论模式在领域驱动设计中的重要性
查看>>
一个创业公司的API网关落地实践
查看>>
国内需求疲弱 铅酸蓄电池新消费税将铅价承压
查看>>
Qt之网络编程
查看>>
《Adobe Acrobat X中文版经典教程》—第2章2.1节打开PDF文件
查看>>
FSF 活动人士呼吁就 DRM 致电 WWW 之父
查看>>
《UNIX环境高级编程(第3版)》——2.8 基本系统数据类型
查看>>
mysql导入报错MySQL server has gone away解决
查看>>
《CCNP ROUTE 300-101学习指南》——2.2节构建EIGRP拓扑表
查看>>
《为自己工作——世界顶级设计师成功法则》目录—导读
查看>>
Libreboot 项目向开源社区示好和致歉
查看>>
《CMYK 2.0——设计师色彩管理手册》—第1章1.3节副作用
查看>>
java.util.concurrent.locks.LockSupport
查看>>
红帽加入 Node.js 基金会白金会员
查看>>