Vue3 v-html的用法

在 Vue3 中,v-html 指令用于将数据以 HTML 格式插入到元素中,它会解析并渲染包含的 HTML 标签,而不是将其作为纯文本显示。

基本用法

vue

xml 复制代码
<template>
  <!-- 使用 v-html 渲染 HTML 内容 -->
  <div v-html="htmlContent"></div>
</template>

<script setup>
const htmlContent = `
  <h3>这是通过 v-html 渲染的内容</h3>
  <p style="color: blue;">包含 HTML 标签和样式</p>
  <ul>
    <li>列表项 1</li>
    <li>列表项 2</li>
  </ul>
`;
</script>

注意事项

  1. XSS 安全风险

    • v-html 会直接解析并执行 HTML 内容,若内容来自用户输入或不可信源,可能导致 XSS 攻击
    • 避免在用户可控的内容上使用 v-html
  2. 样式作用域问题

    • 当使用 <style scoped> 时,样式不会作用到 v-html 渲染的内容
    • 解决方案:使用深度选择器(::v-deep)或非 scoped 样式

    vue

    xml 复制代码
    <style scoped>
    /* 不会作用到 v-html 内容 */
    .v-html-content p {
      color: red;
    }
    
    /* 使用深度选择器 */
    ::v-deep .v-html-content p {
      color: green;
    }
    </style>
  3. 与文本插值的区别

    • 文本插值({{ }})会将内容作为纯文本处理
    • v-html 会将内容作为 HTML 解析

    vue

    xml 复制代码
    <template>
      <!-- 显示为纯文本:<strong>加粗文本</strong> -->
      <div>{{ '<strong>加粗文本</strong>' }}</div>
      
      <!-- 显示为加粗文本 -->
      <div v-html="'<strong>加粗文本</strong>'"></div>
    </template>
  4. 不能用于 SVG

    • v-html 不能在 SVG 元素中使用,会被忽略

使用 v-html 时应谨慎评估安全风险,优先考虑使用 Vue 的组件系统和内置指令来构建界面,只有在确实需要直接插入 HTML 内容时才使用。

相关推荐
刘发财2 小时前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
牛奶5 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶5 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
Kagol7 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
GIS之路8 小时前
ArcGIS Pro 中的 notebook 初识
前端
JavaGuide8 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
ssshooter9 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
格砸9 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
Live0000010 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉10 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化