You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js如何在子组件的slot插槽中动态渲染HTML内容

解决方案

问题根因

Vue默认会对插值语法({{ }})渲染的内容做HTML转义处理,避免XSS攻击,因此你直接将带HTML标签的字符串通过插值传入插槽时,标签会被当做纯文本显示,不会被浏览器解析为DOM节点。
问题截图

方案1:父组件插槽内使用v-html渲染(无需修改子组件,推荐)

你只需要在父组件调用子组件时,在插槽内部使用带v-html指令的元素包裹HTML内容即可:
父组件模板示例:

<template>
  <!-- 其他代码 -->
  <Alert :type="alert.error">
    <!-- 用v-html指令渲染HTML字符串 -->
    <span v-html="alert.message"></span>
  </Alert>
</template>

方案2:改造子组件支持直接传入HTML内容

如果希望调用更简洁,可以将子组件的插槽改为Prop接收HTML内容,子组件内部自行用v-html渲染:

修改子组件(Alert.vue)

<template>
    <div :class="type" class="message" v-if="type" v-html="htmlContent">
    </div>
</template>

<script>
export default {
    props: ['type', 'htmlContent'],
}
</script>

父组件调用

<template>
  <!-- 其他代码 -->
  <Alert :type="alert.error" :html-content="alert.message" />
</template>

安全提示

v-html存在XSS注入风险,如果你的HTML内容来自不可信的用户输入、未校验的第三方接口,务必先使用XSS过滤工具对内容做 sanitize 处理后再渲染,避免恶意脚本执行。

内容的提问来源于stack exchange,提问作者Mr.Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:18:03