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

vue2指令深入学习

继上一篇v-on深入实践之后,今天继续学习v-bind、v-for、v-model这三个核心指令。本文将结合代码示例和实际开发经验,全面讲解这些指令的使用方法和最佳实践。

一、v-bind —— 动态绑定属性

v-bind指令用于动态绑定HTML属性,它的语法糖是冒号:。这是Vue中非常常用的指令之一。

1.1 基础用法

点击查看代码
<div id="app"><!-- 完整写法 --><img v-bind:src="imageUrl" v-bind:alt="imageDesc"><!-- 语法糖写法(推荐) --><img :src="imageUrl" :alt="imageDesc"><!-- 绑定class --><div :class="{ active: isActive, 'text-danger': hasError }">动态class</div><!-- 绑定style --><div :style="{ color: textColor, fontSize: fontSize + 'px' }">动态样式</div><!-- 绑定多个属性(对象形式) --><button v-bind="attrs">提交</button>
</div>
点击查看代码
new Vue({el: '#app',data: {imageUrl: 'https://example.com/logo.png',imageDesc: '网站Logo',isActive: true,hasError: false,textColor: 'red',fontSize: 16,attrs: {disabled: true,type: 'button','data-id': 123}}
})

1.2 class绑定的多种方式

点击查看代码
<!-- 方式1:对象语法(推荐,可读性好) -->
<div :class="{ active: isActive, error: isError }">对象语法</div><!-- 方式2:数组语法 -->
<div :class="[activeClass, errorClass]">数组语法</div><!-- 方式3:数组+对象混合 -->
<div :class="[{ active: isActive }, errorClass]">混合语法</div><!-- 方式4:计算属性(推荐复杂场景) -->
<div :class="classObject">计算属性</div>
点击查看代码
computed: {classObject() {return {active: this.isActive && !this.isError,error: this.isError,'text-bold': this.isImportant}}
}

1.3 修饰符

点击查看代码
<!-- .prop修饰符:绑定DOM属性而非特性 -->
<button :disabled.prop="isDisabled">禁用按钮</button><!-- .camel修饰符:将kebab-case转为camelCase -->
<svg :view-box.camel="viewBox"></svg><!-- 没有修饰符时,v-bind绑定的是attribute -->
<input :value="username">  <!-- 绑定value特性 -->

二、v-for —— 列表渲染

v-for指令用于基于源数据多次渲染元素或模板。必须配合:key使用,以提高虚拟DOM的diff性能

2.1 基础用法

点击查看代码
<div id="app"><!-- 遍历数组 --><ul><li v-for="(item, index) in items" :key="index">{{ index }} - {{ item.name }}</li></ul><!-- 遍历对象 --><ul><li v-for="(value, key, index) in user" :key="key">{{ index }}. {{ key }}: {{ value }}</li></ul><!-- 遍历数字范围 --><span v-for="n in 10" :key="n">{{ n }}</span><!-- 遍历字符串 --><span v-for="char in 'Hello'" :key="char">{{ char }}</span>
</div>
点击查看代码
data: {items: [{ id: 1, name: '苹果' },{ id: 2, name: '香蕉' },{ id: 3, name: '橙子' }],user: {name: '张三',age: 25,email: 'zhangsan@example.com'}
}

2.2 状态维护与key的重要性

点击查看代码
<!-- 错误:使用index作为key(当列表会增删改时有问题) -->
<div v-for="(item, index) in list" :key="index">{{ item.name }}</div><!-- 正确:使用唯一且稳定的id -->
<div v-for="item in list" :key="item.id">{{ item.name }}</div><!-- 正确:没有id时使用完整对象(但会降低性能) -->
<div v-for="item in list" :key="JSON.stringify(item)">{{ item.name }}</div>

2.3 数组更新检测

Vue能检测到以下数组方法的变更:

- 变更方法(会改变原数组):push()、pop()、shift()、unshift()、splice()、sort()、reverse()
- 替换方法(返回新数组):filter()、concat()、slice()
点击查看代码
methods: {// 变更方法:视图会更新addItem() {this.items.push({ id: Date.now(), name: '新项目' })},// 使用新数组替换:视图也会更新updateList() {this.items = this.items.filter(item => item.id !== this.deleteId)},// 错误 直接通过索引修改数组项:视图不会更新(Vue2限制)wrongUpdate() {this.items[0] = { id: 999, name: '修改后的值' }  // 视图不更新!},//正确修改数组项的方式correctUpdate() {// 方式1:使用Vue.setthis.$set(this.items, 0, { id: 999, name: '修改后的值' })// 方式2:使用splicethis.items.splice(0, 1, { id: 999, name: '修改后的值' })}
}

2.4 v-for与v-if的优先级

在Vue2中,v-for优先级高于v-if,这意味着:

点击查看代码
<!-- 不推荐:v-for和v-if用在同一元素上 -->
<!-- 会先遍历整个列表,再过滤,性能较差 -->
<li v-for="user in users" v-if="user.isActive" :key="user.id">{{ user.name }}
</li><!-- 推荐:使用计算属性过滤 -->
<li v-for="user in activeUsers" :key="user.id">{{ user.name }}
</li>
点击查看代码
computed: {activeUsers() {return this.users.filter(user => user.isActive)}
}
http://www.jsqmd.com/news/835585/

相关文章:

  • 2026 江苏南京局部改造旧房装修翻新涂料刷新服务公司 TOP5 权威推荐 + 避坑指南 - 速递信息
  • 大一Java第六周学习总结:封装与继承
  • 博客搭建——CSS外观美化
  • 陷车清零效率提升58%:非标履带底盘案例解析 - 速递信息
  • 宁远装修避坑指南!选对装修公司少花冤枉钱,大秦装饰用实力说话 - 速递信息
  • 航空器配载与货运管理系统三次作业集总结
  • 2026年新疆旅行社行业横向测评白皮书:品质服务与用户体验深度解析 - 速递信息
  • 2026年至今湖北搏击行业现状调查:真实场馆挑选标准与避坑指南 - 速递信息
  • 500以内送礼高跟鞋排行:玫瑰米兰达领衔实用之选 - 奔跑123
  • 合肥黄金回收哪家靠谱?实测3家热门商家,第一名出乎意料 - 速递信息
  • 2026 南京旧房局部改造装修/涂料刷新服务商 TOP5 精选推荐(附避坑攻略) - 速递信息
  • 全城热议!2026 郑州整装口碑榜出炉!几何整装稳居业主首选 - 速递信息
  • 2026年东莞办公家具选购指南:性价比与品质兼得的优选推荐 - 速递信息
  • 零基础精通 GEO 优化:行业发展趋势、核心技术内核与企业全域落地全方位专业解读 - 速递信息
  • 2026年新疆旅行社行业深度攻略:从选型到落地全流程指南 - 速递信息
  • 中山靠谱的汽车贴膜知名店家 - 速递信息
  • 2026年新疆旅行社选型指南白皮书 - 速递信息
  • 2026农村光伏发电租赁屋顶安装推荐:河南区域品牌测评,本土标杆脱颖而出 - 速递信息
  • 恶劣工况下的耐用之选:2026重载领域质量稳定的电动推杆厂家实力榜单 - 速递信息
  • 绿联科技落地新国标合规体系:充电与NAS产品的全链路安全升级 - 速递信息
  • GEO是什么?及2026年北京本地靠谱GEO优化服务商品牌商推荐Top7 - 速递信息
  • 告别高昂运维费:2026国产电动推杆厂家排名(高可靠性与长寿命品牌榜单) - 速递信息
  • 2026年武汉搏击馆真实测评:内行人揭秘挑选标准与避坑指南 - 速递信息
  • 家里太安静是不是好事?晨宝用心理学帮你打破亲子沉默 - 速递信息
  • 靠谱的上海公司注销服务商排名 - 速递信息
  • 面向对象程序设计-第一单元多项式作业总结
  • 2026年武汉散打真实测评:内行人告诉你选哪家不踩坑 - 速递信息
  • JWT Token 过期后 Refresh Token 刷新失败报错 400 怎么修复?
  • 飞机载重平衡与货物管理系统三次作业集总结
  • 2026年武汉盘龙城搏击馆真实测评:内行人告诉你选哪家不踩坑 - 速递信息