Vue:显示数据

发布于:2025-05-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

Vue 提供了两种直接操作文本内容的方式:v-textv-html。它们都能将数据渲染到页面上,但处理方式有本质区别。通过代码示例理解它们的特性和使用场景。


v-text:纯文本输出

与插值表达式 {{ }} 完全等价,将数据作为纯文本输出。适合常规内容展示。

<template>
 <div>
  <!-- 等价于 {{ message }} -->
  <p v-text="message"></p>

  <!-- 会忽略 HTML 标签 -->
  <p v-text="rawHtml"></p>  <!-- 页面显示 <b>Hello</b> -->
 </div>
</template>

<script>
export default {
  data() {
    return {
      message: "普通文本",
      rawHtml: "<b>Hello</b>"
    };
  }
};
</script>

v-html:原始 HTML 渲染

解析数据中的 HTML 标签并渲染为真实 DOM。适合需要动态生成 HTML 的场景,但必须谨慎使用。

<template>
 <div>
  <!-- 渲染粗体文字 -->
  <p v-html="rawHtml"></p>  <!-- 显示 Hello(加粗) -->

  <!-- 动态生成内容 -->
  <div v-html="dynamicContent"></div>
 </div>
</template>

<script>
export default {
  data() {
    return {
      rawHtml: "<b>Hello</b>",
      dynamicContent: "<span style='color: red;'>警告</span>"
    };
  }
};
</script>

安全风险示例

当使用 v-html 渲染不可信内容时,会导致 XSS 攻击:

<template>
 <div>
  <!-- 假设用户输入恶意内容 -->
  <div v-html="userInput"></div>
 </div>
</template>

<script>
export default {
  data() {
    return {
      // 模拟用户输入的恶意脚本
      userInput: "<script>alert('你的信息被盗了!')</script>"
    };
  }
};
</script>

此时页面会执行脚本弹窗。实际开发中,必须对 v-html 的内容进行过滤或消毒。


两者对比

特性 v-text / {{ }} v-html
输出类型 纯文本 原始 HTML
安全性 自动转义 HTML 标签 直接执行 HTML/JS
性能 更高 较低(需解析 DOM)
适用场景 普通文本、数值 富文本、可信 HTML 片段