【Vue】01 基础语法
Hello Vue的演示案例:
<!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js" ></script> </head> <body> <div id="container-element"> {{message}} </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { message : "Hello Vue !!!", }, }); </script> </body> </html>
效果:
一个由Vue类创建的实例,el属性绑定对应元素id或者选择器,
data对象里的属性可以以键的标识进行获取和渲染
我们可以在浏览器的控制台中改变message的值,来改变渲染
Vue指令:
1、使用Bind指令来渲染
v-bind:attr="value"
用一个输入框标签,对value属性设置message的值来渲染
<!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js" ></script> </head> <body> <div id="container-element"> <input type="text" v-bind:value="message"> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { message : "Hello Vue !!!", } }); </script> </body> </html>
效果:
结论:一定情况下,{{field}} & v-bind 都可以渲染
2、判断指令
单个IF-ELSE:
<div id="container-element"> <p v-if="answer"> answer属性值为True </p> <p v-else> answer属性值为False </p> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { answer : false } }); </script>
效果:
设置为True时:
多分支判断:
<div id="container-element"> <p v-if="answer === 'A'"> answer属性值为A </p> <p v-else-if="answer === 'B'"> answer属性值为B </p> <p v-else-if="answer === 'C'"> answer属性值为C </p> <p v-else-if="answer === 'D'"> answer属性值为D </p> <p v-else> answer属性值为其他 </p> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { answer : '' } }); </script>
效果:
遍历指令:
v-for="item in items"
items是遍历的数组名称,item即数组的每一个元素
<div id="container-element"> <p v-for="person in array"> {{person.name}} {{person.age}} {{person.gender}} </p> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { array : [ { name : "阿伟", age : 23, gender : true}, { name : "杰哥", age : 23, gender : true} ] } }); </script>
效果:
3、事件绑定
使用on指令用以对设置的标签元素监听事件:
v-on=""
对这个标签使用v-on绑定事件和对应的js函数即可,要注意的是vue所采用的是jq命名的事件
<div id="container-element"> <p v-on:click="helloMethod">点击触发事件</p> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { }, methods : { helloMethod : function () { alert("事件触发!!!"); } }, }); </script>
效果:
可以通过this来调取这个函数所属的对象的属性:
<div id="container-element"> <p v-on:click="helloMethod">点击触发事件</p> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { status : 100 }, methods : { helloMethod : function () { alert(this.status); } }, }); </script>
效果:
双向绑定:
使用v-model对标签元素的value值来处理
v-model="value"
演示案例:
<div id="container-element"> <textarea name="" id="" cols="30" rows="10" v-model="input"></textarea> <p>{{input}}</p> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { input : "呵呵啊" }, methods : { }, }); </script>
效果:
对下拉列表的一些操作:
<div id="container-element"> <select v-model="the_select" name="" id=""> <option value="" disabled>- - 请选择- -</option> <option>A</option> <option>B</option> <option>C</option> </select> <p>The Choose is {{the_select}}</p> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#container-element", data : { the_select : '' }, methods : { }, }); </script>
效果:
【v-text指令用于渲染文本内容】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> </head> <body> <div id="application"> <h3 v-text="message + '啊洒洒洒洒'"></h3> </div> <script> let vueModel = new Vue({ el : "#application", data : { message : "这是由v-text指令渲染的数据" } }); </script> </body> </html>
v-html指令用于渲染标签元素
普通文本和v-text无区别,但是支持将html标签转义处理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> </head> <body> <div id="application"> <div v-html="message"></div> </div> <script> let vueModel = new Vue({ el : "#application", data : { message : " <p> 这里是被p标签渲染的文本 <strong> 这里是被strong标签渲染的文本 </strong> </p> " } }); </script> </body> </html>
效果:
【v-on事件绑定的补充】
一般写法:
v-on:事件名称="被执行的函数名称"
简写语法:
@事件名称="被执行的函数名称"
注意,执行的函数只能在Vue对象内的methods属性对象中声明
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> </head> <body> <div id="application"> <button @click="executing">点击执行</button> </div> <script> let vueModel = new Vue({ el : "#application", methods : { executing : function () { alert("声明的方法执行!!!"); } } }); </script> </body> </html>
双击事件使用dblclick
<input type="button" value="双击执行" @dblclick="executing">
如果函数需要注入参数,指令绑定的时候可以这样:
<input type="button" value="双击执行" @dblclick="executing(param1,param2,...)">
如果是键盘输入的事件绑定,事件需要具体引用到某一个键入或者组合键入
<input type="button" value="双击执行" @keyup.enter="executing(param1,param2,...)">
官方文档详细:
https://cn.vuejs.org.v2/api/#v-on
【计数器案例】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> </head> <body> <div id="application"> <button @click="decrease"> - </button> <span v-text="number"></span> <button @click="increase"> + </button> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#application", data : { number : 5 }, methods : { increase : function () { if (this.number === 10) { alert("不可相加了..."); return; } this.number += 1; }, decrease : function () { if (this.number === 0) { alert("不可减少了..."); return; } this.number -= 1; } } }); </script> </body> </html>
为0时不可以减少
为10时不可以再加
【v-show控制元素的显示 [ 展示 & 隐藏 ] 】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="./js/vue.min.js"></script> </head> <body> <div id="application"> <p v-show="isShow">这是演示的文本内容</p> <button @click="changeTrue">展示</button> <button @click="changeFalse">隐藏</button> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#application", data : { isShow : true }, methods : { changeTrue : function () { this.isShow = true; }, changeFalse : function () { this.isShow = false; } } }); </script> </body> </html>
或者直接使用取反赋值实现切换
// changeIsShow : function () { // this.isShow = !this.isShow; // }
【图片切换案例】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="./js/vue.min.js"></script> </head> <body> <div id="application"> <button @click="preview" v-show="index !== 1">上一张</button> <img :src="imageArray[index]" alt=""> <button @click="next" v-show="index !== 8" >下一张</button> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#application", data : { index : 1, imageArray : [ './image/img1.jpg', './image/img2.jpg', './image/img3.jpg', './image/img4.jpg', './image/img5.jpg', './image/img6.jpg', './image/img7.jpg', './image/img8.jpg', ] }, methods : { preview : function () { this.index --; }, next : function () { this.index ++; } } }); </script> </body> </html>
【记事本案例】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> table, tr, td { border: solid 1px black; } </style> <script src="./js/vue.min.js"></script> </head> <body> <div id="application"> <table > <tr > <td colspan="2" style="width: 600px"> <input style="width: 600px" type="text" placeholder="要记录的事项" v-model="inputValue" @keyup.enter="addItem"> </td> </tr> <tr v-for="(info,index) in infoList"> <td v-text="(index + 1) + ' ' + info"> </td> <td> <span @click="deleteItem(index)"> 删除 </span> </td> </tr> <tr> <td colspan="2" v-show="infoList.length !== 0">{{infoList.length}} 事项剩余 <span @click="clearList" style="background: lawngreen">清空</span> </td> </tr> </table> </div> <script type="text/javascript"> let vueModel = new Vue({ el : "#application", data : { infoList : ["java", "c/c++", "linux", "python", "rust"], inputValue : '' }, methods : { addItem : function () { this.infoList.push(this.inputValue); }, deleteItem : function (index) { //alert(index); this.infoList.splice(index, 1); }, clearList : function () { this.infoList = []; } } }); </script> </body> </html>