gpt4 book ai didi

javascript - vue.js - 在插槽内转义 html

转载 作者:搜寻专家 更新时间:2023-10-30 22:25:13 33 4
gpt4 key购买 nike

我目前正在开发一个如下所示的组件:

  <pre v-highlightjs>
<code>
<slot></slot>
</code>
</pre>

所以我遇到的问题是,当我在插槽中编写 html 时,这个 html 被呈现,并且在我的例子中没有显示为字符串或代码示例。我已经用转义的 < 和 > 测试了它并且它有效。如何访问插槽内的 html 并自动转义?

谢谢

编辑:

我对该组件使用 highlight.js 来突出显示我的组件内的代码。 highlight.js 也可以突出显示 html。当我把例如

<html><head></head><body></body></html> 

在我的插槽中,显示了框,但输入呈现为 html。所以我想转义 html 标签(和其他代码片段),以便显示它并突出显示。希望能详细说明我的问题。

最佳答案

需要注意的一个重要限制是您的 HTML 不是 HTML,它是 Vue 模板引擎的输入,因此组件在插槽中看到的内容可能与 HTML 文件中的内容不完全相同。

编写指令以获取 HTML 内容并将其替换为该内容的文本版本非常简单。将其放入组件中也非常简单。您可以在下面的代码片段中看到这些。

您还将看到 Vue 模板引擎去除了不应位于 body 内的标签:htmlheadbody 标签不会出现在组件中。它们的内容(如果有的话)会保留下来。

如果能够使用这些标签很重要(或者,就此而言,可能是无效的 HTML),您将无法在插槽中执行此操作。您需要将 HTML 作为数据字符串,您可以使用普通 curl 轻松地对其进行插值。

new Vue({
el: '#app',
data: {
headContent: 'Something in the head'
},
components: {
htmlEscaper: {
template: '#html-escaper',
directives: {
escapeContent: {
bind(el) {
const html = el.innerHTML;

el.textContent = html;
}
}
}
}
}
});
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<div id="app">
<html-escaper>
<html>
<head>
{{ headContent }}
</head>
<some-junk>
Custom tags are ok
</some-junk>
<body>
<div>This part is legit</div>
</body>
</html>
</html-escaper>
</div>

<template id="html-escaper">
<code v-escape-content>
<slot>
</slot>
</code>
</template>

关于javascript - vue.js - 在插槽内转义 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250475/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com