介绍
用 v-for 把一个数组对应为页面上的一组元素
vue.js 使用的是 v-for 指令来处理组件元素的循环迭代逻辑。通常它会和 v-if 配合使用,达到我们所需要的处理逻辑。
v-for 的语法形式是 item in items,其中 items 就是我们要循环的数组,而 item 则是被迭代的数组元素的别名。
<ul id="example-1"> <li v-for="item in items"> {{ item.message }} </li> </ul>
我们都知道既然有循环那肯定少不了对索引的处理。v-for 指令给我们提供了可选的第二个参数,即当前项的索引。
<ul id="example-2"> <li v-for="(item, index) in items"> {{ parentMessage }} - {{ index }} - {{ item.message }} </li> </ul>
index 就是那个当前索引了。
你也可以使用 of 替代 in 作为分隔符。
<div v-for="item of items"></div>
在 v-for 里使用对象
是哒,很明显 v-for 也可以用来遍历一个对象的属性。
<ul id="v-for-object" class="demo"> <li v-for="value in object"> {{ value }} </li> </ul>
也可以提供第二个参数为 property 名称 (也就是键名)
<div v-for="(value, name) in object"> {{ name }}: {{ value }} </div>
还可以用第三个参数作为索引
<div v-for="(value, name, index) in object"> {{ index }}. {{ name }}: {{ value }} </div>
维护状态
敲黑板啦哈~
vuejs 为了维护循环列表的状态需要提供唯一的 key 属性。
这个唯一的 key 可以为我们提供列表元素状态的更新,避免重复渲染等优化页面的性能。
这个 key 很关键,并不推荐使用简单的索引作为 key 的值,因为会有造成重复渲染混乱的可能。
数组更新检测
咳咳~ 继续敲黑板
我们在写程序的时候,往往会有数据更新但是页面元素没有跟着对应变化的情况。
数组列表的更新检测 vue 为我们提供了一套解决方案,但是需要注意它们在使用的方式上是不同的。
变异方法
意思就是以下的数组处理方法可以触发视图上的更新。
push() pop() shift() unshift() splice() sort() reverse()
需要注意的是它们处理的都是原始数组。也就是在原来的数组上增加删除或者排序操作。
非变异方法
数组也有一些方法不会改变原始数据,而是返回新的数组。
filter() concat() slice()
返回新的数组在页面更新渲染的性能大家不必担心,vue 已经为我们做好了重用工作。
需要注意,在有些情况 vue 无法检测数组变动的情况如下:
- 当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
- 当你修改数组的长度时,例如:vm.items.length = newLength
var vm = new Vue({ data: { items: ['a', 'b', 'c'] } }) vm.items[1] = 'x' // 不是响应性的 vm.items.length = 2 // 不是响应性的
为了解决这类问题,官方提供了两种解决方案。
1、Vue.set
// Vue.set Vue.set(vm.items, indexOfItem, newValue)
2、Array.prototype.splice
// Array.prototype.splice vm.items.splice(indexOfItem, 1, newValue)
如果我们在处理数据无法更新视图的时候记得试试这个方法。
对象变更检测注意事项
对于对象属性的增加和删除,对于已经创建的实例,Vue 不允许动态添加根级别的响应式属性。
对于这个问题可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式属性。
v-for 还可以处理整数的循环
<div> <span v-for="n in 10">{{ n }} </span> </div>
最后提醒使用 v-for 时一定要记得带上 key 哟!
神秘的 set
综上我们会知道 js 无法处理组件即时更新的都由 vue 提供的这个 set 方法接管。那么这个 set 有什么过人之处,可以完成组件与数据的绑定呢?
关键位置可以看 vue 源码的这里 github.com/vuejs/vue/b…
set 方法开始会有一些逻辑判断,对于数组的处理依然使用的是 splice 方法。
if (Array.isArray(target) && isValidArrayIndex(key)) { target.length = Math.max(target.length, key) target.splice(key, 1, val) return val }
其余的就交给我们 vue 不支持的 IE8 ECMAScript5 特性 Object.defineProperty
Object.defineProperty(obj, key, { value: val, enumerable: !!enumerable, writable: true, configurable: true })
下次我会对 Object.defineProperty 在做详细介绍,今天就到这了,晚安"color: #ff0000">总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]