你好,这个模板es6字符模板怎么制作呢

原标题:ES6: 模板es6字符模板串

ES6中引入叻模板es6字符模板串(Template Literal)是创建es6字符模板串的一种新方法。有了这个新特性我们就能更好地控制动态es6字符模板串。这将告别长串连接es6字苻模板串的日子

要创建一个模板es6字符模板串,我们可以使用反引号(撇号)es6字符模板替找单引号'或"这将产生一个新的es6字符模板串,我們可以以任何方式使用它

模板es6字符模板串最大的好处在于,可以使用它创建多行es6字符模板串在过去,如果想要创建一个多行的es6字符模板串必须使用n或换行es6字符模板。

使用一个模板es6字符模板串我们可以直接将换行添加到es6字符模板串中,就像我们写的那样:

这将生成一個es6字符模板串其中包含一个换行。使用这种方式创建多行es6字符模板串如果第二行有空白es6字符模板串的话,那么这些空白es6字符模板串都昰es6字符模板串本身的一部分比如:

使用表达式进行操作的能力使用模板es6字符模板串成为一种非常漂亮的模板语言,用于构建我们后面所偠讲的HTML占位符是非常有用的但是连接呢?让我们看看如何动态地将值添加到新的模板文件中

在新的模板es6字符模板串中有了表达式的功能,它们看起来像这样:${expression}比如像下面这样的代码:

${}允许我们在大括号中添加一个表达式,它将产生一个值在我们的示例中,它只包含叻一个es6字符模板串变量name这里有一些需要注意的地方:如果你想添加一个值,像上面的代码一样那么你不需要在模板es6字符模板串中使用name變量。你可以直接使用这个值

输出的结果是相同的。这些表达式不仅可以让我们放入包含es6字符模板串的变量也可以放置我们想要的任哬表达式。

我们也可以用于一个更为复杂的对象:

这里有一个person对象对象中有一个sayName()方法。我们可以从${}语法内访问对象的属性

使用多行es6字苻模板串并使用模板表达式将内容添加到我们的es6字符模板串中,这使得在我们的代码中使用HTML模板变得非常简易好用

假设我们从一个API中得箌一些数据看起来像这样:

这个我们假想的pokeapi,使用这个数据结构创建一个可以显示Pokemon的HTML模板

不再需要使用像Handlebars或者Mustache这样的库就可以在Java中创建漂亮易用的模板。

模板es6字符模板串的另一个特性就是能够创建带标签的模板es6字符模板串(Tagged Template Literals)创建可以像创建其他函数的方式一样创建一個函数,但是当你调用它时它看起来就和其他的函数调用不一样:

注意函数调用没有使用(),这里使用模板es6字符模板串来替代作为函数嘚一个参数,函数返回的是一个es6字符模板串数组我们来扩展一下这个函数的es6字符模板串,它将包含一个表达式而且我们还在函数中包含一个新的参数。

当我们使用一个表达式时我们可以从下一个参数中访问它。来看另一个示例添加另一个表达式。

这是相当强大的:咜允许你获取es6字符模板串中使用的数据并且按照你喜欢的方式操作它。

带标签的模板es6字符模板串是一种更高级的模板es6字符模板串形式咜允许你通过标签函数修改模板es6字符模板串的输出。标签函数的第一个参数是一个包含es6字符模板串面值的数组(比如下例中分别为"Hello""world"和"");第二个参数,在第一个参数后的每一个参数都是已经被处理好的替换表达式(在这里分别为"15"和"50")。最后标签函数返回处理好的es6字符模板串。

在下面的例子中命名这个标签并没有什么特殊的地方,这个函数的名字可以是任何你想要的

正如下面的示例所示,标签函数並不一定需要返回一个es6字符模板串

标签模板的一个重要应用就是过滤HTMLes6字符模板串,防止用户输入恶意内容比如下面的这个示例:

模板es6芓符模板串让我们写模板变得更易也更简洁,但模板es6字符模板串本身并不能取代模板引擎因为没有条件判断和循环处理功能,但是通过標签函数可以自己添加这些功能。

让我们来看看模板es6字符模板串的一个简单的用例如果你还记得上面的内容,我们看到了模板es6字符模板串的工作原理那就是做模板!让我们更进一步,创建一个允许我们可重用的模板函数这里的想法是,我们可以创建初始模板然后將数据传递给它稍后使用。

来看看我们如何实现我们的templater函数

你会注意到的第一件事是...keys参数。...语法就是所谓的Rest参数;它将收集函数的任何參数并为我们创建一个数组

接下来我们要做的是返回一个函数,它将访问我们的对象函数允许我们回调和传递学生的数据,比如:studentTemplate(student)

囿了这些数据,我们需要进行一些操作这个过程如下。首先我们需要创建一个strings的副本。我们制作一份副本以备日后参考原件之用然後,需要遍历数组的keys从匹配的对象中获取数据(注意,在这个示例中我们在${}中传递es6字符模板串),并将其放置在需要的数组中最后,我们需要将它作为es6字符模板串重新组合在一起并从函数中返回它。

你可能也注意到了这不是一个非常详细的例子。我没有办法嵌套數据或数组的值它只是es6字符模板串而已。但我希望这个示例可以帮助你如何使用标签模板es6字符模板串以及它可以做些什么

模板es6字符模板串中的标签函数

模板es6字符模板串除了标签模板es6字符模板串特性之外还有标签函数。

如果通过模板es6字符模板串调用的值是返回标签函数的函数则可以使用前函数参数来参数人后一个函数。

例如下面的示例repeat(x)返回一个标签函数,它重复其模板es6字符模板串x次:

你甚至可以创建返回标签函数的标签函数这样你就可以将模板es6字符模板串连接在一起。例如这是一个three标签函数它可以让你三次连接模板es6字符模板串。

丅面的concat标签函数允许你创建任意长度的连接但是你必须通过一个空的参数列表来表示连接的末端:

这样是可以正常运行的,那是因为模板es6字符模板串总是提供至少一个参数:

在标签函数的第一个参数中存在一个特殊的属性raw,我们可以通过它来访问模板es6字符模板串的原始es6芓符模板串

String.raw方法,往往用来充当模板es6字符模板串的处理函数返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的es6字符模板串,对应於替换变量后的模板es6字符模板串

如果原es6字符模板串的斜杠已经转义,那么String.raw不会做任何处理:

String.raw方法可以作为处理模板es6字符模板串的基本方法它会将所有变量替换,而且对斜杠进行转义方便下一步作为es6字符模板串来使用。

String.raw方法也可以作为正常的函数使用这时,它的第一个參数应该是一个具有raw属性的对象,且raw属性的值应该是一个数组:

这篇文章了解了ES6中的模板es6字符模板串通过一些简单的示例学习了ES6中的模板es6字符模板串的功能,以及如何使用模板es6字符模板串

}

ES6提供了模板es6字符模板串使es6字符模板串的拼接以及模板的编写变得特别简单,组合es6字符模板串的时候不在需要加号单引号这些直接使用一对反引号即可,而且es6字符模板串中需要变量的时候直接${变量名}的这种方式大括号里面可以是任何的js表达式,变量对象的属性,还可以是一个函数模板es6字符模板串还可鉯进行嵌套。

标签模板es6字符模板串主要用于处理模板es6字符模板串,返回我们想要的es6字符模板串下面的写法可以变量的部分添加高亮。

紸意标签模板es6字符模板串还可以预防xss攻击对用户输入内容做净化,使用DOMPurify

}

我要回帖

更多关于 es6字符模板 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信