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

ES6

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

http://es6.ruanyifeng.com/

我们来看看ES6里的String Template。

首先看下面这段代码。

<html><div id="JerryTest"></div><script>function getHTML(names){var content = names.map((name) =>{ return "<p>Hello, " + name + "!</p>"});return content.join("");}var names = ["Java", "JavaScript", "ABAP"];var dom = document.getElementById("JerryTest");dom.innerHTML = getHTML(names);</script></html>

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

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

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

<html><div id="JerryTest"></div><script>function getHTML(names){var content = names.map((name) =>{ return `<p>Hello, ${name}!</p>`});return content.join("");}var names = ["Java", "JavaScript", "ABAP"];var dom = document.getElementById("JerryTest");dom.innerHTML = getHTML(names);</script></html>

可以看到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上了:

https://github.com/i042416/KnowlegeRepository/blob/master/practice/angular/angular.js

String Template in React

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

Hello

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

String Template in ABAP

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

看一个具体的例子吧。

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

ES6, Angular,React和ABAP中的String Template(字符串模板)相关推荐

  1. C++中求string类型字符串的长度的方法

    在代码中经常会求字符串的有效长度,对char型字符串数组大家会用strlen来求它的有效长度,如何求string类型字符串的有效长度呢?这里有三种方法. (1)使用string的成员函数length( ...

  2. Java中,String类字符串拼接 用concat方法 和直接用“+”连接符拼接的区别

    在String类中,字符串拼接既可以使用concat方法,也可以直接用连接符进行连接,那么两者有什么相同点和不同点呢,下面小编带大家通过代码一起来看一下. concat方法的使用:public Str ...

  3. abap中利用正则表达式除去字符串中的数字

    REPLACE ALL OCCURRENCES OF REGEX '[0-9]' IN lv_bstkd WITH space.

  4. C++/C++11中std::string用法汇总

    C++/C++11中std::string是个模板类,它是一个标准库.使用string类型必须首先包含<string>头文件.作为标准库的一部分,string定义在命名空间std中. st ...

  5. ie模版字符串_字符串模板、模板字符串、Vue中使用template等等。

    1:模板字符遇新是直朋能到串 传统的一如分算需上来处一定迹面数一跳这件我子作JS语言,输出模板新直能分支调二浏页器朋代说,事刚需求是这样写的: $('#result').append( 'There ...

  6. smtplib + email 操作邮件 及 string.Template模板替换 + openpyxl模块 来实现个性化操作邮件相关

    通过 smtplib模块 + emaill模块 来操作邮件 源代码如下: import smtplib #邮箱服务器 from email.mime.multipart import MIMEMult ...

  7. vue模板字符串标签动态参数_Vue中的字符串模板的使用

    1.HTML模板和字符串模板 HTML模板:直接在HTML页面挂载的模板.(即非字符串模板) 非字符串模板:在单文件里用 指定的模板,换句话说,写在 html 中的就是非字符串模板. 字符串模板:在j ...

  8. vue和react相同点_我在React和Vue中创建了相同的应用程序。 这是区别。

    vue和react相同点 by Sunil Sandhu 由Sunil Sandhu 我在React和Vue中创建了相同的应用程序. 这是区别. (I created the same app in ...

  9. angular绑定数据_Angular中的数据绑定说明

    angular绑定数据 数据绑定 (Data Binding) 动机 (Motivation) Data often defines the look of an application. Inter ...

最新文章

  1. n2n linux,n2n安装
  2. PHP 打印调用堆栈信息
  3. Java NIO学习
  4. python结果导入excel_荐Python读取、写入EXCEL,处理数据完成运算具体实例及代码,Pycharm中导入库的操作流程...
  5. php函数积累第二弹(关于文件操作)
  6. CSS 元素的定位之相对定位 position: relative
  7. 解析markdown_利用 markdown 生成页面实践
  8. 深入解析:半连接与反连接的原理和等价改写方法
  9. CentOS 7 配置Java环境变量
  10. 【BFS】迷宫问题c++代码详解(逐句分析)
  11. 状态空间模型与传递函数的转换关系+例题
  12. W5500连不上的问题
  13. 基于spss的偏相关分析(partial correlation analysis)
  14. 多开分身苹果版_【教程】苹果手机居然可以微信分身?全套教程,进来领取
  15. 关于ms17010渗透
  16. 网络研讨会|为什么在开发流程中应用静态代码分析工具?
  17. C51连接远程服务器
  18. ASCII、Unicode、UTF-8
  19. 给定平面上任意三个点的坐标(x​1​​,y​1​​)、(x​2​​,y​2​​)、(x​3​​,y​3​​),检验它们能否构成三角形
  20. 2016 ECCV-Gated Siamese Convolutional Neural Network Architecture for Human Re-ID

热门文章

  1. redis 源码 ziplist.c 压缩list的实现
  2. localhost,127.0.0.1 与 本机IP的区别
  3. 阿里大数据分析与应用(part3)--常用的大数据分析平台
  4. 特征工程(part3)--扁平化、过滤和分块
  5. Django(part5)--url匹配优先级
  6. 初识Mysql(part15)--我需要知道的4条Mysql语句之操作表
  7. sql between 效率高吗_B2增驾好吗
  8. Python中的模块和包:模块的(动态)导入、__future__模块使用
  9. ABAP SAPGUI 里使用 F4 value help 选择时间
  10. 在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据