Vue v-html 指令
实例
使用 v-html 指令输出一个包含 <ol> 和 <li> 标记的列表。
<div id="app"><div>{{ htmlContent }}</div><div v-html="htmlContent"></div></div>
定义与用法
v-html 指令用于将 HTML 标记和文本插入到元素中。
如果您尝试使用文本插值(使用大括号 {{ }})输出 HTML 标记,结果将只是一个文本字符串。请参阅上面的实例。
使用 <style scoped> 在单个文件组件(SFCs)中定义的作用域样式不会影响 v-html 指令中的 HTML。请参阅下面的第一个实例。
为了在 SFC 中实现 v-html 中包含的 HTML 的范围样式,我们可以将 CSS 模块与 <style module> 一起使用。请参阅下面的第二个实例。
注意:用户可以以某种方式指定
v-html 中包含的内容的页面存在跨站点脚本(XSS)攻击的风险。更多实例
实例 1
使用范围样式,样式不适用于 v-html 中包含的 HTML。
这个问题在下一个例子中得到了解决。
<template><h1>实例1</h1><p>当使用范围样式时,v-HTML 指令中包含的 HTML 样式不起作用.</p><p><a href="#">看下一个实例</a> 了解我们如何通过使用 CSS 模块来解决这个问题。</p><div v-html="htmlContent" id="htmlContainer"></div></template><script>export default {data() {return {htmlContent: "<p>Hello from v-html</p>"}}};</script><style scoped>#htmlContainer {border: dotted black 1px;width: 200px;padding: 10px;}#htmlContainer > p {background-color: coral;padding: 5px;font-weight: bolder;width: 150px;}</style>
实例 2
将 CSS 模块与 <style module> 一起使用,而不是使用 <style scoped>,样式是有范围的,并且样式适用于 v-html 中包含的 HTML。
上一个例子中的这个问题现在已经解决。
<template><h1>实例2</h1><p>v-html 指令中包含的 HTML 的范围样式现在通过使用带有 style-module 的 CSS 模块而不是 style-Scoped 来工作。</p><div v-html="htmlContent" :id="$style.htmlContainer"></div></template><script>export default {data() {return {htmlContent: "<p>Hello from v-html</p>"}}};</script><style module>#htmlContainer {border: dotted black 1px;width: 200px;padding: 10px;}#htmlContainer > p {background-color: coral;padding: 5px;font-weight: bolder;width: 150px;}</style>