vue循环key的作用(vue中的v-for循环)
1.v-for遍历普通数组
in前面如果是一个变量 ,那么该变量保存的是数组中的数据in前面如果是两个变量 ,那么第一个变量保存的是数组中的数据 ,第二个变量保存的是下标 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <!-- 绑定事件 v-on: 简写为@ --> <button @click="add">点击在数组最后添加元素</button> <ul style="list-style-type: none;"> <!-- item是数组里面的元素 index是数组的下标 --> <li v-for="(item,index) in list">{{index}}-{{item}}</li> </ul> </div> <script src="/vue.js"></script> <script> new Vue({ el: #app, data: { list: [猪方, 战神, 小金子, 楠神] }, methods: { add() { this.list.push(黑牛) } }, }) </script> </body> </html>2.v-for遍历对象
如果是一个变量 ,那么保存的是对象中的属性值
如果是两个变量 ,那么第一个变量保存的是属性值 ,第二个变量保存的是属性名
如果是三个变量 ,那么第一个变量保存的是属性值 ,第二个变量保存的是属性名 ,第三个变量保存的是下标
v-for="o1 in obj" o1:属性值
v-for="(o1,o2) in obj" o1:属性值 o2:属性名
v-for="(o1,o2,o3) in obj" o1:属性值 o2:属性名 o3:下标
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <ul> <li v-for="item in obj">{{item}}</li> <hr> <li v-for="(val,key) in obj">{{ key }}-{{ val }}</li> </ul> </div> <script src="./vue.js"></script> <script> new Vue({ el: #app, data: { obj: { name: 卡拉米, age: 16, sex: 男, } } }) </script> </body> </html>3.v-for循环数字
in后面不仅可以放数组 、对象数组 、对象 ,还可以放数字
在in前面用一个变量存储当前次数 ,注意:此变量是从1开始 ,而不是从0开始
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <ul style="list-style-type: none;"> <!-- v-for=遍历的数 in 遍历的范围 --> <li v-for="num in 9">{{num}}</li> </ul> </div> <script src="/vue.js"></script> <script> new Vue({ el: #app, }) </script> </body> </html>4. Key是什么?
Key 特殊属性主要用做 Vue 的虚拟 DOM 算法在将新节点列表与旧列表进行比较时识别 VNode 的提示 。在没有键的情况下,Vue 使用一种算法来最小化元素移动 ,并尝试尽可能多地就地修补/重用相同类型的元素 。使用键 ,它将根据键的顺序更改对元素进行重新排序,并且不再存在键的元素将始终被删除/销毁 。
5.有无Key值不同调用方法
Vue内部会对有无Key值的for循环进行不同方法的处理
(1) patchKeyedChildren
有 Key , 进行 patchKeyedChildren
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <!-- @click="list.splice(下标,删除的数量,添加的元素)" --> <button @click="list.splice(1,0,{name:狗屎,age:11,sex:男,id:4})">点击添加对象</button> <ul> <li v-for="item in list" :key="item.id"> <!-- 单选框 --> <input type="checkbox"> <!-- 行内元素 --> <span>{{item.name}}</span> </li> </ul> </div> <script src="/vue.js"></script> <script> new Vue({ el:#app, data:{ list:[ {name:战神,age:18,sex:男,id:1}, {name:金子,age:18,sex:男,id:2}, {name:铜牌,age:18,sex:男,id:3} ] } }) </script> </body> </html>(2)patchUnKeyedChildren
没有 Key ,进行 patchUnKeyedChildren
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <!-- @click="list.splice(下标,删除的数量,添加的元素)" --> <button @click="list.splice(1,0,{name:狗屎,age:11,sex:男,id:4})">点击添加对象</button> <ul> <li v-for="item in list"> <!-- 单选框 --> <input type="checkbox"> <!-- 行内元素 --> <span>{{item.name}}</span> </li> </ul> </div> <script src="/vue.js"></script> <script> new Vue({ el:#app, data:{ list:[ {name:战神,age:18,sex:男,id:1}, {name:金子,age:18,sex:男,id:2}, {name:铜牌,age:18,sex:男,id:3} ] } }) </script> </body> </html>创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!