(二)Vue.js 指令、事件与计算属性

目录

[二、Vue.js 指令、事件与计算属性](#二、Vue.js 指令、事件与计算属性)

[2.1 Vue.js 基础指令](#2.1 Vue.js 基础指令)

[1. v-pre 跳过编译](#1. v-pre 跳过编译)

[2. v-html 标签解析](#2. v-html 标签解析)

[3. v-text 文本解析](#3. v-text 文本解析)

[4. v-cloak 斗篷](#4. v-cloak 斗篷)

[5. v-show 显示](#5. v-show 显示)

[6. v-if 条件判断与显示](#6. v-if 条件判断与显示)

[v-show 与 v-for 如何选择](#v-show 与 v-for 如何选择)

[7. v-for 循环](#7. v-for 循环)

[8. v-bind:key 唯一标识符](#8. v-bind:key 唯一标识符)

[2.2 事件绑定指令 v-on](#2.2 事件绑定指令 v-on)

[1. 基本用法与事件处理](#1. 基本用法与事件处理)

[2. 核心功能:修改数据](#2. 核心功能:修改数据)

[3. 事件调用](#3. 事件调用)

[4. 语法糖:简写形式](#4. 语法糖:简写形式)

[2.3 属性绑定指令](#2.3 属性绑定指令)

[1. v-bind:动态绑定属性](#1. v-bind:动态绑定属性)

[2. v-bind 绑定class属性的 4 种方式](#2. v-bind 绑定class属性的 4 种方式)

[(1) 对象格式(动态控制类名)](#(1) 对象格式(动态控制类名))

[(2) 三元运算符格式(条件选择类名)](#(2) 三元运算符格式(条件选择类名))

[(3) 数组格式(同时绑定多个类名)](#(3) 数组格式(同时绑定多个类名))

[(4) 函数格式(动态返回类名)](#(4) 函数格式(动态返回类名))

[3. v-bind 绑定style属性的 3 种方式](#3. v-bind 绑定style属性的 3 种方式)

[(1) 对象格式(动态控制单个/多个样式)](#(1) 对象格式(动态控制单个/多个样式))

[(2) 数组格式(合并多个样式对象)](#(2) 数组格式(合并多个样式对象))

[(3) 函数格式(动态计算样式)](#(3) 函数格式(动态计算样式))

[2.4 计算属性(computed)](#2.4 计算属性(computed))

[1. computed 基本用法](#1. computed 基本用法)

[2. computed 的 getter 与 setter](#2. computed 的 getter 与 setter)

[3. computed VS methods](#3. computed VS methods)

二、Vue.js 指令、事件与计算属性

2.1 Vue.js 基础指令

1. v-pre 跳过编译

v-pre 告诉 Vue:"这个标签里的内容你别管,直接按原样显示给用户看。"

2. v-html 标签解析

v-html 告诉 Vue:"把这段字符串当作 HTML 代码来解析并渲染到页面上。"

3. v-text 文本解析

v-text 和 Mustache 语法 (`{{ }}`) 几乎一样,都是用来更新元素的纯文本内容,但它不会解析 HTML 标签。

4. v-cloak 斗篷

当页面加载时,如果 Vue.js 文件比较大或者网络较慢,浏览器可能会先渲染出原始的 HTML 模板。这时,用户会短暂地看到 {{ message }} 这样的原始代码,而不是最终的数据。这个现象被称为"闪动"(Flash of Uncompiled Content)。

v-cloak 指令就是为了解决这个问题而生的。它本身没有任何作用,需要结合 CSS 才能发挥。

在这个例子中,用户在1.5秒内看到的将是 一片空白(因为元素被隐藏了),而不是 {{ pageTitle }}。1.5秒后,Vue 加载完毕,v-cloak 被移除,正确的标题和内容会瞬间显示出来。

5. v-show 显示

当你需要根据一个条件频繁地切换某个元素的显示状态时,v-show 是一个非常高效的选择。

v-show 通过简单地切换 CSS 的 display 属性来控制元素的显示和隐藏,属性的值可以直接填写表达式。且元素始终存在于 DOM 中。

它的工作原理非常直接:

  • 当表达式为 true 时,元素正常显示(display: block 或其他默认值)。
  • 当表达式为 false 时,元素被隐藏(display: none)。

6. v-if 条件判断与显示

v-if 也可以用来控制元素的显示与隐藏。

v-if 是真正的"条件渲染",它不会去修改样式,而是根据条件的真假,直接操作 DOM 的结构。决定是 将元素添加到 DOM 中,还是 从 DOM 中移除 。元素在 DOM 中是"有"或"无"的关系,而不是"显示"或"隐藏"。

它的工作原理:

  • 当表达式为 true 时,Vue 会创建这个元素并将其插入到 DOM 中。
  • 当表达式为 false 时,Vue 会销毁这个元素,将其从 DOM 中完全移除。

v-show 与 v-for 如何选择

  • 用 v-show:如果你有一个元素需要 非常频繁地 在显示和隐藏之间切换(比如一个响应鼠标悬停的提示框),用 v-show,因为它的切换性能更好。
  • 用 v-if:如果一个元素在页面加载后 基本不会改变 显示状态,或者它在初始状态下就是隐藏的,用 v-if,因为它有更低的初始渲染开销,并且能真正地减少不必要的 DOM 节点。

7. v-for 循环

v-for 是 Vue 的循环指令,能根据一个数组(或对象)的数据,高效地生成一组重复的 DOM 结构。

它的基本语法是 v-for="(item, index) in arr"

  • item:是数组中当前正在被遍历的元素。
  • index:是当前元素的索引(从0开始)。
  • arr:是你想要遍历的原数组。

8. v-bind:key 唯一标识符

key 是给 v-for 循环出的每个元素一个唯一的身份证,让 Vue 能精准地识别、更新和重排元素,从而大幅提升性能并避免渲染错误。

如何选择 key 的值?

推荐使用:

  • 唯一且稳定的 id
  • id 是数据自带的,不会因为增删或排序而改变,能准确定位到数据本身。
  • 例如:user.id

不推荐使用:

  • 数组索引 (index)
  • Index 会随着数组顺序变化而变化。当列表重排时,用 index 做 key 会导致 Vue 混淆元素,引发渲染错误或性能问题。
  • 例如:index
  • 唯一例外:如果你的列表是 静态的,永远不会发生增、删、排序等操作,那么用 index 作为 key 也是可以的。

2.2 事件绑定指令 v-on

v-on 是Vue中用于绑定事件监听的核心指令,其核心用法和要点如下:

1. 基本用法与事件处理

**绑定:**使用 v-on (或其简写 @ ) 在模板中为元素绑定事件,如 v-on:click="btnClick"。

**处理:**事件触发后执行的函数(事件处理器)必须在组件的 methods 选项中定义。

2. 核心功能:修改数据

事件处理函数的核心作用是修改 data 中的数据,从而驱动视图更新。

在 methods 中,通过 this.数据名 (如 this.flag) 的形式来访问和修改 data 中的数据。

3. 事件调用

在一个事件处理函数中,可以通过 this.方法名() 的形式调用 methods 中定义的其他方法,实现代码复用。

4. 语法糖:简写形式

v-on: 在实际开发中通常使用其简写形式 @ ,两者功能完全相同。

例如:v-on:click="handler"` 可简写为 @click="handler",代码更简洁。

2.3 属性绑定指令

1. v-bind:动态绑定属性

当 HTML 标签的属性需要动态赋值(如从 Vue 的data中获取数据)时,使用v-bind指令。

例如:

简写规则: v-bind:属性名 可简写为 :属性名(如:href、:class)。

核心作用:

  • 动态更新:data中的值变化时,绑定的属性会自动更新。
  • 避免硬编码:替代直接写死属性值(如<a href="固定链接">),实现数据驱动视图。

对比其他指令:

  • v-bind(:)→ 绑定属性(如:href)。
  • v-on(@)→ 绑定事件(如@click)。
  • 两者结合可实现数据与交互的联动。

2. v-bind 绑定class属性的 4 种方式

Vue.js 提供了灵活的class绑定方法,可根据需求选择最适合的形式。

(1) 对象格式(动态控制类名)

通过对象控制类名的添加与移除,键是类名,值是布尔值(true 表示添加,false 表示移除)

注:如果把 true 改为 false,则样式消失。

(2) 三元运算符格式(条件选择类名)

根据条件返回不同的类名,适合二选一的情况。(结合例子2.3-2(1))

javascript 复制代码
<!-- 条件为 true 时添加 fontblue,否则添加 bgpink -->
<li :class="isBlue ? 'fontblue' : 'bgpink'">
    若isBlue为true,文字显示蓝色;否则显示粉色背景
</li>
(3) 数组格式(同时绑定多个类名)

直接传入多个类名,适合同时添加多个固定类(结合例子2.3-2(1))

javascript 复制代码
<li :class="['fontblue', 'bgpink']">蓝色文字、粉色背景</li>
(4) 函数格式(动态返回类名)

通过方法返回类名(字符串、对象或数组),适合复杂逻辑

3. v-bind 绑定style属性的 3 种方式

Vue 使用 v-bind:style (或简写 :style) 动态绑定内联样式,主要有三种方式:

(1) 对象格式(动态控制单个/多个样式)

直接绑定一个样式对象,键为 CSS 属性名(驼峰或短横线),值为动态变量。

  • 单个样式
  • 多个样式
(2) 数组格式(合并多个样式对象)

当样式来自不同对象时,可用数组合并。例如:

(3) 函数格式(动态计算样式)

通过方法返回样式对象或数组,适合复杂逻辑。

注意: CSS 属性名可用驼峰(如backgroundColor)或短横线(需引号包裹,如 'background-color')。

2.4 计算属性(computed)

计算属性用于实时计算数据,它能将数据计算与模板分离,并带来性能优化。常见于购物车金额计算、表单联动等场景。

1. computed 基本用法

像数据属性一样声明一个函数,该函数返回计算后的值。模板中可直接引用,它会自动更新。

注意: computed中定义的属性名(如fullName)不能与data重复。

2. computed 的 getter 与 setter

在Vue.js文件中定义每个属性都使用 Object.defineProperty() 方法,该方法会为属性追加 get()方法与 set()方法,一般称为getter和setter。

默认只有 getter(只读),主要用来返回数据结果。setter可手动添加 ,当计算属性的值发生变化时触发。

3. computed VS methods

|----------|------------------|------------------|
| 特性 | computed | methods |
| 缓存 | 有缓存,依赖不变时重复调用不执行 | 无缓存,每次调用均执行 |
| 适用场景 | 依赖数据变化的复杂计算 | 需要主动触发的逻辑(如事件处理) |
| 性能 | 更高(适合频繁使用的计算) | 较低(每次调用均重新计算) |

相关推荐
黑客飓风3 小时前
Chrome性能优化指南
前端·chrome·性能优化
pc大老3 小时前
如何修复 Google Chrome 上的白屏问题
前端·网络·chrome·浏览器·谷歌
xqlily3 小时前
Chrome性能优化指南大纲
前端·chrome·性能优化
FreeBuf_3 小时前
Chrome高危类型混淆0-Day漏洞(CVE-2025-10585)技术分析
前端·chrome
Code_流苏3 小时前
Gemini in Chrome深度解析:反垄断胜诉后,Chrome开启AI智能浏览时代!
前端·人工智能·chrome·gemini·智能时代·ai browser
冲!!3 小时前
项目中的图形验证码是前端还是后端实现?
前端·vue.js
xiyangxiaoguo3 小时前
Qt QEventLoop的使用的一个问题讨论
java·前端·算法
小墨宝4 小时前
umijs 4.0学习 - 路由
前端·javascript·学习
介次别错过4 小时前
React入门
前端·javascript·react.js