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

相关推荐
chxii20 分钟前
在 IIS 中实现 SSL 证书的自动续期
前端
周星星日记27 分钟前
vue3中静态提升和patchflag实现
前端·vue.js·面试
橘子编程33 分钟前
React 19 全栈开发实战指南
前端·react.js·前端框架
DanCheOo34 分钟前
AI Streaming 架构:从浏览器到服务端的全链路流式设计
前端·agent
我是小趴菜40 分钟前
前端如何让图片、视频、pdf等文件在浏览器直接下载而非预览
前端
cg331 小时前
开源项目自动化:用 GitHub Actions 让每个 Issue 都被温柔以待
前端
haierccc1 小时前
Win7、2008R2、Win10、Win11使用FLASH的方法
前端·javascript·html
We་ct1 小时前
LeetCode 50. Pow(x, n):从暴力法到快速幂的优化之路
开发语言·前端·javascript·算法·leetcode·typescript·
柠檬味的Cat1 小时前
使用腾讯云COS作为WordPress图床的实践
前端·github·腾讯云
Hilaku1 小时前
卷AI、卷算法、2026 年的前端工程师到底在卷什么?
前端·javascript·面试