Vue v-html 指令

实例

使用 v-html 指令输出一个包含 <ol><li> 标记的列表。

  1. <div id="app">
  2. <div>{{ htmlContent }}</div>
  3. <div v-html="htmlContent"></div>
  4. </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。

这个问题在下一个例子中得到了解决。

  1. <template>
  2. <h1>实例1</h1>
  3. <p>当使用范围样式时,v-HTML 指令中包含的 HTML 样式不起作用.</p>
  4. <p><a href="#">看下一个实例</a> 了解我们如何通过使用 CSS 模块来解决这个问题。</p>
  5. <div v-html="htmlContent" id="htmlContainer"></div>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. htmlContent: "<p>Hello from v-html</p>"
  12. }
  13. }
  14. };
  15. </script>
  16. <style scoped>
  17. #htmlContainer {
  18. border: dotted black 1px;
  19. width: 200px;
  20. padding: 10px;
  21. }
  22. #htmlContainer > p {
  23. background-color: coral;
  24. padding: 5px;
  25. font-weight: bolder;
  26. width: 150px;
  27. }
  28. </style>
实例 2

将 CSS 模块与 <style module> 一起使用,而不是使用 <style scoped>,样式是有范围的,并且样式适用于 v-html 中包含的 HTML。

上一个例子中的这个问题现在已经解决。

  1. <template>
  2. <h1>实例2</h1>
  3. <p>v-html 指令中包含的 HTML 的范围样式现在通过使用带有 style-module 的 CSS 模块而不是 style-Scoped 来工作。</p>
  4. <div v-html="htmlContent" :id="$style.htmlContainer"></div>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. htmlContent: "<p>Hello from v-html</p>"
  11. }
  12. }
  13. };
  14. </script>
  15. <style module>
  16. #htmlContainer {
  17. border: dotted black 1px;
  18. width: 200px;
  19. padding: 10px;
  20. }
  21. #htmlContainer > p {
  22. background-color: coral;
  23. padding: 5px;
  24. font-weight: bolder;
  25. width: 150px;
  26. }
  27. </style>

分类导航