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 内容时才使用。

相关推荐
爱学习的茄子4 小时前
Function Call:让AI从文本生成走向智能交互的技术革命
前端·深度学习·openai
aol1214 小时前
X6官方示例「数据加工DAG图」转为Vue版
前端·vue.js
南雨北斗4 小时前
vue3 attribute绑定
前端
一枚前端小能手4 小时前
🚀 主线程卡死用户要骂娘?Web Worker让你的应用丝滑如德芙
前端·javascript
小桥风满袖4 小时前
极简三分钟ES6 - Promise
前端·javascript
breeze_whisper4 小时前
当前端收到一个比梦想还大的数字:BigInt处理指南
前端·面试
小喷友4 小时前
阶段四:实战(项目开发能力)
前端·rust
小高0074 小时前
性能优化零成本:只加3行代码,FCP从1.8s砍到1.2s
前端·javascript·面试
子兮曰4 小时前
🌏浏览器硬件API大全:30个颠覆性技术让你重新认识Web开发
前端·javascript·浏览器