Vue指令系统
一、模板语法
- {{变量}}
- {{1+1}}
- {{‘hello’}}
- {{函数的调用}}
- {{1==1?'真的':'假的'}}
使用{{ }}进行插值等价于v-text指令,等价于JavaScript的innerText,{{}}中不能使用if else。
在Vue实例化对象之后,这个对象中的属性默认在前面添加$符号,主要跟自己定义的属性区分。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue</title> </head> <body> <div id="app"> <!--模板中渲染数据--> <h3>{{msg}}</h3> <!--模板中字符串拼接--> <h3>{{msg + "Vue"}}</h3> <!--模板中三元运算--> <h3>{{1===1?'真的':'假的'}}</h3> </div> </body> <script src="./node_modules/vue/dist/vue.js"></script> <script type="application/javascript"> var app=new Vue({ el: "#app",//挂载点 data: { //数据属性 msg: "Hello " } }); console.log(app) </script> </html>
二、指令
轮播图的实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>轮播图实现</title> </head> <style type="text/css"> img{ width: 400px; height: 300px; } ul{ list-style: none; width: 400px; height: 40px; padding: 0; } ul li{ float: left; width: 100px; height: 40px; line-height: 40px; background-color: purple; color:#fff; text-align: center; } .active{ background-color: green; } </style> <body> <div id="slider"> <img v-bind:src="currentImgSrc" alt=""> <ul> <li v-for="(item,index) in imgArr" v-bind:class="{active:currentIndex==index}" v-on:click="click(index)"> {{index+1}} </li> </ul> </div> <script src="./node_modules/vue/dist/vue.js"></script> <script type="application/javascript"> var imgArr=[ {id:1,imgSrc:'./images/1.jpg'}, {id:2,imgSrc:'./images/2.jpg'}, {id:3,imgSrc:'./images/3.jpg'}, {id:4,imgSrc:'./images/4.jpg'}, ]; var app=new Vue({ el:"#slider", template:``, data:{ imgArr:imgArr, currentIndex:0, currentImgSrc:'./images/1.jpg' }, methods:{ click(index){ this.currentIndex=index; this.currentImgSrc=this.imgArr[index].imgSrc; } } }); </script> </body> </html>
1、v-if
通过控制数据属性值,来间接创建或销毁dom元素
v-if可以直接做简单的运算,类似模板插值一样
2、v-show
通过控制数据属性值,来间接显示或隐藏dom元素,实际是控制style样式来实现显示与隐藏
3、v-text
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <h3>{{msg}}</h3> </div> </body> <script src="./node_modules/vue/dist/vue.js"></script> <script type="application/javascript"> new Vue({ el:"#app", data:{ msg:"hello指令系统" }, //template渲染,直接替换根元素 template:"<h3>{{msg}}</h3>" }) </script> </html>
等价于JavaScript的innerText
4、v-html
等价于JavaScript的innerHTML
5、v-for
将可迭代对象遍历渲染到dom上
<ul> <li v-for="(item,index) in menuList"></li> <li v-for="(value,key) in menuList"></li> </ul>
6、v-on
- 事件源即事件来源
- 事件即操作
- 事件驱动程序即方法
v-on:click对当前DOM绑定click事件,所有原生js事件都可以用v-on绑定,语法糖"@"
7、v-bind
标签中的所有属性都可以通过v-bind:属性名="{} || [] || 变量名 || 常量"绑定,绑定的字符串值必须是数据属性中的数据
v-bind:class="{active:true}" 通过控制对象值的真假来确定是否应用该样式
v-bind:href="url" 这里url必须是数据属性
语法糖":"
8、v-model
只允许在表单控件中使用,如input、textarea、select、checkbox等