二、Vue 模板语法与指令大全:从 v-if 到 v-for(附代码示例)

1. Vue 模板语法概览

Vue 的模板语法是 HTML 的扩展,通过 插值指令 实现数据绑定与动态渲染。核心特性包括:

  • 插值表达式{{ }} 实时渲染数据
  • 指令系统:以 v- 开头的特殊属性(如 v-ifv-for
  • 简写语法:attr 代替 v-bind:attr@event 代替 v-on:event

2. 基础指令详解

2.1 插值与文本绑定

{{ }} 插值表达式
<template>
  <p>当前时间:{{ currentTime }}</p>
</template>

<script>
export default {
  data() {
    return { currentTime: new Date().toLocaleTimeString() };
  }
};
</script>
v-text 指令
<div v-text="message"></div>
<!-- 等价于 -->
<div>{{ message }}</div>

2.2 条件渲染

指令说明示例代码
v-if条件成立时渲染元素<div v-if="isLogin">欢迎用户</div>
v-elsev-if 的否则分支<div v-if="isLogin">已登录</div><div v-else>请登录</div>
v-else-if多条件分支<div v-if="score>90">A</div><div v-else-if="score>60">B</div>
v-show通过 display 控制显示/隐藏<div v-show="isVisible">内容</div>

注意v-if 是惰性渲染(条件不成立时不渲染 DOM),而 v-show 始终渲染但控制可见性。

2.3 列表渲染

v-for 基础用法
<template>
  <ul>
    <li v-for="(item, index) in items" :key="index">
      {{ index }}. {{ item.name }} - {{ item.age }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Alice', age: 25 },
        { id: 2, name: 'Bob', age: 30 }
      ]
    };
  }
};
</script>
遍历对象
<div v-for="(value, key, index) in userInfo">
  {{ key }}: {{ value }} (索引: {{ index }})
</div>

最佳实践:key 应使用唯一标识(如 id)而非索引,避免列表更新时的性能问题。

3. 高级指令与特性

3.1 属性绑定

v-bind 基础
<img :src="imageUrl" :alt="imageAlt" />
<!-- 动态 class -->
<div :class="['box', {'active': isActive}]"></div>
<!-- 动态 style -->
<div :style="{ color: textColor, fontSize: '16px' }"></div>
缩写语法
:src="imageUrl"       → v-bind:src="imageUrl"  
@click="handleClick"  → v-on:click="handleClick"

3.2 事件处理

事件修饰符
修饰符作用示例代码
.stop阻止事件冒泡<button @click.stop="handle"></button>
.prevent阻止默认行为<a @click.prevent="handle" href="#">链接</a>
.once事件只触发一次<button @click.once="handle">提交</button>
按键修饰符
<input @keyup.enter="submit" />  <!-- 监听回车键 -->
<input @keyup.delete="handle" />  <!-- 监听删除键 -->

3.3 双向绑定

v-model 基础
<template>
  <input v-model="username" placeholder="请输入用户名" />
  <p>输入内容:{{ username }}</p>
</template>

<script>
export default {
  data() { return { username: '' } }
};
</script>
修饰符
修饰符作用示例代码
.trim自动过滤首尾空格<input v-model.trim="username" />
.number转换为数值类型<input v-model.number="age" />
.lazy延迟更新(默认在 input 事件后)<input v-model.lazy="message" />

4. 其他实用指令

4.1 v-once 单次渲染

<div v-once>初始值:{{ count }}</div>
<button @click="count++">+1</button>
<!-- 点击按钮时,v-once 内容不会更新 -->

4.2 v-html 渲染 HTML 内容

<div v-html="htmlContent"></div>
<script>
export default {
  data() {
    return { htmlContent: '<p style="color:red">危险内容</p>' };
  }
};
</script>

注意:此指令存在 XSS 风险,应避免渲染不可信内容。

5. 指令对比与最佳实践

场景推荐指令原因
条件渲染v-if(条件不成立时卸载)适合低频切换场景
频繁显示/隐藏v-show通过 CSS 控制,性能更优
列表渲染v-for + 唯一 :key避免渲染错误,提升更新效率
表单双向绑定v-model简化数据同步逻辑
动态属性/样式v-bind 简写 :语法简洁,支持复杂表达式

6. 总结

Vue 模板语法通过指令系统实现了强大的动态渲染能力,掌握以下核心要点:

  1. 数据绑定{{ }} 插值与 v-bind 实现数据到 DOM 的映射
  2. 条件与循环v-if/v-showv-for 控制内容显示逻辑
  3. 交互行为v-on 处理事件,v-model 实现双向数据绑定
  4. 性能优化:合理使用 v-once 和唯一 :key 提升渲染效率

本文由 [码说数字化] 原创,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值