当前位置: 首页 > news >正文

vue——v-pre的使用

🔰 基础理解

✅ 什么是 v-pre?

v-pre 是一个跳过编译的 Vue 指令。

它告诉 Vue:“这个元素和其子元素中的内容不要被编译处理,按原样输出。”

✅ 使用场景:

  • 展示原始的 Mustache 插值语法({{ xxx }})。
  • 模板中写教程或代码示例时。

✅ 示例代码:

<p v-pre>{{ name }}</p>

🚀 页面渲染效果:

{{ name }}

🔍 而不是:变量 name 的值。

🔍 进阶用法

✅ 跳过模板编译器解析

Vue 模板解析过程中,v-pre 会直接略过元素及其所有子节点的指令、插值表达式等编译流程,仅保留原始 HTML。

例如:

<div v-pre><span>{{ hello }}</span><button @click="doSomething">点我</button>
</div>
  • 不会把 {{ hello }} 编译为数据绑定。
  • @click 也不会生效(事件绑定会失效)。
  • 整个 block 是纯 HTML。

✅ 常用场景

场景原因
教程/文档/代码展示不希望 Vue 编译代码中的花括号
静态说明文字代码块不会绑定数据,不需要解析提升性能
临时排除某个块的解析排查问题、对比结果

✅ 和其他指令配合使用

  • v-pre 的优先级最高,会覆盖其他指令
  • 即使同节点存在 v-if、v-for,也一律无效

🔁 Vue 2 与 Vue 3 的差异

特性Vue 2Vue 3
语法支持✅ 完整支持✅ 完整支持
编译跳过机制✅ 编译器在解析时判断并跳过✅ 更高效地在虚拟 DOM 编译器阶段跳过
编译后静态提升优化❌ 不具备✅ 可配合模板静态提升一起使用
是否仍需手动使用✅ 对教程等仍然实用✅ 使用频率降低,Vue 3 编译器自动处理更多

🧠 总结

项目内容说明
指令名称v-pre
基本作用跳过编译,保留 HTML 中原样内容
适用场景教程代码展示、模板排错、静态段落
会跳过哪些功能?插值表达式、指令绑定(如 v-if、v-for、@click)等
Vue2 和 Vue3 差异Vue 3 在静态分析和性能提升上更强,但语义不变

案例

确保已安装 highlight.js:

npm install highlight.js
<template><div class="demo-block"><h2 class="title">Vue 代码示例</h2><!-- 语言切换按钮 --><div class="tabs"><button v-for="lang in languages" :key="lang" :class="{ active: currentLang === lang }" @click="currentLang = lang">{{ lang }}</button></div><!-- 代码展示 --><pre v-pre><code :class="'language-' + currentLang" ref="codeBlock">
{{ codeMap[currentLang] }}
</code></pre><h3>🎯 实际效果:</h3><div class="preview"><p>{{ message }}</p><button @click="sayHi">点我</button></div></div>
</template><script setup>
import { ref, watch, onMounted } from 'vue'
import hljs from 'highlight.js'
import 'highlight.js/styles/github.css'const languages = ['html', 'vue', 'js']
const currentLang = ref('vue')const codeMap = {html: `<p>{{ message }}</p>\n<button @click="sayHi">点我</button>`,vue: `<template><p>{{ message }}</p><button @click="sayHi">点我</button>
</template><script setup>
import { ref } from 'vue'
const message = ref('你好,Vue')
function sayHi() {alert('你好!')
}
<\/script>`,js: `import { ref } from 'vue'\nconst message = ref('你好,Vue')\nfunction sayHi() {\n  alert('你好!')\n}`
}const message = ref('你好,Vue')
function sayHi() {alert('你好!')
}const codeBlock = ref()const highlight = () => {if (codeBlock.value) {hljs.highlightElement(codeBlock.value)}
}onMounted(highlight)
watch(currentLang, highlight)
</script><style scoped>
.demo-block {padding: 20px;border: 1px solid #ccc;border-radius: 10px;margin: 2em 0;
}
.title {font-size: 20px;margin-bottom: 10px;
}
.tabs {margin-bottom: 10px;
}
.tabs button {margin-right: 8px;padding: 5px 10px;cursor: pointer;border: 1px solid #aaa;background: #f0f0f0;border-radius: 4px;
}
.tabs button.active {background: #007bff;color: white;border-color: #007bff;
}
.preview {margin-top: 1em;padding: 1em;background: #f9f9f9;border-radius: 8px;border: 1px dashed #ccc;
}
pre {background: #f5f5f5;padding: 10px;border-radius: 8px;overflow-x: auto;
}
</style>
http://www.xdnf.cn/news/618571.html

相关文章:

  • Redis 面经
  • 开发指南118-背景渐变特效
  • SOC-ESP32S3部分:8-GPIO输出LED控制
  • 如何做好一份技术文档?
  • JavaSE核心知识点03高级特性03-01(集合框架)
  • AbMole| MG132(133407-82-6,M1902,蛋白酶体抑制剂)
  • 西北某县智慧水务系统新升级:能预判·会听话·秒响应的智能“水管家”上岗
  • 探索常识性概念图谱:构建智能生活的知识桥梁
  • YOLOv4论文超详细精讲(翻译+学习笔记)
  • 文章记单词 | 第112篇(六级)
  • Flask框架全方位深度解析
  • Python |GIF 解析与构建(2):状态机解析
  • 2000-2023年各地级市进出口总额/地级市对外经济贸易数据
  • queue和priority_queue及其函数
  • ld: cpu type/subtype in slice (arm64e.old) does not match fat header (arm64e)
  • mysql连接池druid监控配置
  • 2025年工会考试题库及答案
  • MyBatis 中 parameterType 属性
  • AutoCAD Electrical 自定义多极元件
  • 反本能---如何对抗你的习以为常
  • 二分算法(灵神边界处理复习)
  • 电子电路:能认为电抗也是在做功吗?
  • 软件测试(4) 白盒测试
  • 归一化与标准化
  • 频率分布直方图
  • halcon初始
  • 深度剖析并发I/O模型select、poll、epoll与IOCP核心机制
  • 计算机组成原理-基本运算部件定点数的运算
  • 【安全攻防与漏洞​】​​Heartbleed漏洞复现与修复
  • 【JS】vue3具名导出与默认导出