指令directive:vue指令的作用是通过带有 v- 的特殊属性,实现对DOM的响应式加载
1、v-if:通过布尔表达式进行对DOM的上树和下树的渲染
例1
1 2 | <h1 v-if="true">v-if的基本使用</h1> <h1 v-if="false">v-if的基本使用</h1> |
工作中不是使用布尔值直接渲染,而是通过data带有布尔值进行渲染
例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <body> <div id="app"> <h1 v-if="bool">通过data带的布尔值进行判断</h1> <h1 v-if="!bool">通过data带的布尔值进行判断</h1> </div> </body> <script src="js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { bool: true } }) </script> |
v-if="bool" 上树 v-if="!bool" 不上树
v-if 的显示根本原理
1、通过对值的隐式转换
2、通过对表达式的判断得出的布尔值得来的
例3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <body> <div id="app"> <h1>{<!-- -->{num}}</h1> <p v-if="num>=0 && num<10">0-10显示</p> <p v-else-if="num>=10 && num<20">10-20显示</p> <p v-else-if="num>=20 && num<30">20-30显示</p> <p v-else="num>=30">30以上显示</p> <button @click="add">++</button> <button @click="Reduction">--</button> </div> </body> <script src="js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { num: 0 }, methods: { add() { this.num++; }, Reduction() { this.num--; } } }) </script> |
通过v-if和v-else-if和v-else进行分支判断
v-else 的使用前提,必须是先有v-if 中间不能有仍和元素间隔
0-10显示
中间元素
30以上显示
2、v-show:v-show和v-if情况类似 ,但原理不一样,v-show 是通过对元素的display属性控制的,并没有实现元素的下树
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <body> <div id="app"> <h1>num:{<!-- -->{num}}</h1> <h1 v-show="num>=0 && num<10">0-10显示</h1> <h1 v-show="num>=10 && num<20">10-20显示</h1> <h1 v-show="num>=20">20以上显示</h1> <button @click="add">++</button> <button @click="reduction">--</button> </div> </body> <script src="js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { num: 0 }, methods: { add() { this.num++; }, reduction() { this.num--; } } }) </script> |
v-show和v-if 的使用场景:如果切换特别频繁使用v-show,如果页面设计范围大且不是特别频繁的切换使用v-if,主要区分设计页面的性能。
3、v-for:循环指令,遍历数组或对象的每一个值
例:遍历数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div id="app"> <ul> <li v-for="items in arr">{<!-- -->{items}}</li> </ul> </div> <script src="js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { arr: ["足球", "篮球", "排球", "乒乓球"] } }) </script> |
v-for的index和key 属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div id="app"> <ul> <li v-for="(items,index) in arr" :key="index">{<!-- -->{index}}-{<!-- -->{items}}</li> </ul> </div> <script src="js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { arr: ["足球", "篮球", "排球", "乒乓球"] } }) </script> |
items:指的是遍历数组或对象中的每一个值,items的命名不是规定的,可以自定义命名
index:每一项被遍历的下标索引值
key : 给每一项值添加元素标识,作用是为了区分元素,实现最小量的更新
例:遍历对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <div id="app"> <ul> <li v-for="(people,key,index) in sutdent" :key="index">{<!-- -->{key}}---{<!-- -->{index}}---{<!-- -->{people}}</li> </ul> </div> <script src="js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { sutdent: { name: "张三", age: "18岁", sex: "男", class: "高三8班" } } }) </script> |
people :对象的内容
key:表示对象的key键值名称
index:当前对象的下标索引值
例:工作中遍历JSON更多
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <div id="app"> <table> <tr v-for="(items,index) in students" :key="index"> <td>{<!-- -->{index}}-{<!-- -->{items.name}}</td> <td>{<!-- -->{index}}-{<!-- -->{items.age}}</td> <td>{<!-- -->{index}}-{<!-- -->{items.sex}}</td> </tr> </table> </div> <script src="js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { students: [{ name: "张三", age: "18岁", sex: "男" }, { name: "李四", age: "20岁", sex: "女" }, { name: "王五", age: "19岁", sex: "男" }, { name: "赵柳", age: "22岁", sex: "男" }, ] } }) </script> |
例 JSON的嵌套使用 九九乘法表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <div id="app"> <table> <tr v-for="i in num" :key="i"> <td v-for="j in i" :key="j"> {<!-- -->{i}} X {<!-- -->{j}} = {<!-- -->{i*j}} </td> </tr> </table> </div> <script src="js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { num: [1, 2, 3, 4, 5, 6, 7, 8, 9] } }) </script> |
v-for 遍历出来的不是数据,而是元素
v-for 使用items和index的时候一定要使用括号抱起来