Vue:显示数据

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 片段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值