一.安装准备
vue安装
1.安装node.js
https://nodejs.org/en/download/
2.全局安装vue-cli3.0脚手架
若安装了旧版本 (1.x或2.x),先卸载
1
| npm uninstall vue-cli -g
|
安装
1
| sudo npm install -g @vue/cli
|
然后vue -V出现版本号则成功
构建项目,选择default则是默认配置
或者直接引入
1
| <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
|
编辑器安装
使用VSCode + Live Server插件
第一个Vue程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <!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>Vue基础</title> </head> <body> <div id="app"> {{message}} </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el:"#app", data:{ message:"hola 你好!" } }) </script> </body> </html>
|
二.Vue基础
el-挂载点
Q: Vue实例作用范围?
A: 在el命中的元素及内部的后代元素
Q: 是否可以使用其他选择器?
A: 支持,参照js的选择器,建议使用id选择器
Q: 是否可以设置其他dom元素?
A: 除了html和body都可以
data数据对象
Vue中用到的数据定义在data中
data可以写复杂类型数据
渲染复杂类型数据时,遵守js语法
1 2 3 4 5 6 7 8 9 10 11 12 13
| <script> var app = new Vue({ el:"#app", data:{ message:"你好,515code", school:{ name:"李华", mobile:"13800138000" }, campus:["北京","上海","广州","深圳"] } }) </script>
|
Vue本地应用
Vue指令
指的是v-开头的一组特殊语法
1.内容绑定,事件绑定
1.1 v-text:设置标签的文本值
1 2 3 4 5 6
| <div id="app"> <!--v-text的使用,里面所有内容都会被替换--> <h2 v-text="message"></h2> <!--插值表达式--> <h2>{{message}}</h2> </div>
|
同时,可以采用字符串的拼接,例如:
1 2 3 4 5 6
| <div id="app"> <!--v-text的使用--> <h2 v-text="message+'!'"></h2> <!--插值表达式--> <h2>{{message+"!"}}</h2> </div>
|
1.2 v-html:设置标签的文本值
参考上面v-text,只不过html结构的内容会被解析
1.3 v-on:为元素绑定事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <div id="app3"> <!--单击事件--> <input type="button" value="事件绑定" v-on:click="doIt"> <!--鼠标移动到区域内事件--> <input type="button" value="事件绑定" v-on:mouseenter="doIt"> <!--双击事件--> <input type="button" value="事件绑定" v-on:click="doIt"> </div> <script> var app3 = new Vue({ el:"#app3", methods:{ doIt:function(){ alert("事件触发!"); } } }) </script>
|
可以看到,使用v-on:事件名="方法名"即可绑定事件,方法定义在methods属性中
技巧:可以使用@替代v-on,效果完全一样
在Vue中,如果要更新dom元素内的数据,无需获取dom元素去修改,在方法内部使用this关键字即可,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <div id="app3"> <h2 @click="changeFood">{{foods}}</h2> </div> <script> var app3 = new Vue({ el:"#app3", data:{ foods:"鸡扒饭" }, methods:{ changeFood:function(){ //将 鸡扒饭 改为 鸡扒饭好好吃,直接用this获取当前data属性即可 this.foods+="好好吃!"; } } }) </script>
|
学到这里,可以手写一个计数器试试~ 要求:上限10,下限0,点击+号数值加1,点击减号数值减1
v-on补充
传递参数与按键事件绑定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <div id="app"> <!--传递参数至方法中--> <input type="button" value="点击" @click="doIt(666,'老铁')"> <!--输入回车触发事件--> <input type="text" @keyup.enter="sayHi"> </div> <script> var app = new Vue({ el:"#app", methods:{ doIt:function(p1,p2){ console.log("做IT"); console.log(p1);//666 console.log(p2);//老铁 }, sayHi:function(){ alert("吃了没"); } } })
</script>
|
2.显示切换,属性绑定
根据表达值真假,切换元素的显示与隐藏
2.1 v-show:切换元素的显示与隐藏
v-show中的值为true或false,例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <div id="app5"> <input type="button" value="切换显示状态" @click="changeIsShow"> <img src="https://cdn.jsdelivr.net/gh/BA-NANA/banana.github.io@1.0/assets/img/tjut.jpg" v-show="isShow"> </div> <script> var app5 = new Vue({ el:"#app5", data:{ isShow:true }, methods:{ changeIsShow:function(){ this.isShow=!this.isShow; } } }) </script>
|
如上所示,修改isShow的真值就能轻松控制图片是否显示,同时v-show支持表达式写法
2.2 v-if:切换dom元素的显示与隐藏
用法与v-show类似,例子:
1 2 3
| <p v-if="isShow"> 这是一个p标签 </p>
|
那么v-if和v-show有啥区别?
v-if是通过控制dom节点的存在与否来控制元素的显隐;v-show是通过设置DOM元素的display样式
所以,频繁切换的元素建议用v-show,否则用v-if(性能略差)
2.3 v-bind:设置元素属性
v-bind:属性名=表达式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <div id="app7"> <img v-bind:src="imgSrc"> <img v-bind:title="imgTitle+'!'">5. <img v-bind:class="{active:isActive}"> </div> <script> var app7=new Vue({ el:"#app7", data:{ imgSrc:"图片地址", imgTitle:"515code", isActive:false } }) </script>
|
技巧:v-bind可以省略,即 :src=“…”
下面实现一个图片切换的功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <div id="app"> <img :src="imgArr[index]"> <a href="#" @click="prev" v-show="index!=0">上一张</a> <a href="#" @click="next" v-show="index<imgArr.length-1">下一张</a> </div> <script> var app = new Vue({ el:"#app", data:{ imgArr:["链接1","链接2","链接3"], index:0, //索引值默认为0 }, methods:{ prev:function(){ this.index--; }, next:function(){ this.index++; } } }) </script>
|
3.列表循环,表单元素绑定
3.1 v-for:根据数据生成列表结构
可以遍历数据生成列表结构,语法为**(item, index) in 数据**,例子:
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 39
| <div id="app"> <input type="button" value="添加数据" @click="add"> <input type="button" value="添加数据" @click="remove"> <ul> <li v-for="item in arr"> {{item}} </li> <hr> <li v-for="(item,index) in arr"> {{index+1}}.{{item}} </li> <h2 v-for="item in objArr" v-bind:title="item.name"> {{item.name}} </h2> </ul> </div> <script> var app = new Vue({ el:"#app", data:{ arr:["北京","上海","广州","深圳"], objArr:[ {name:"jack"}, {name:"rose"} ] }, methods:{ add:function(){ //添加一个对象元素 this.objArr.push({name:"zach"}) }, remove:function(){ //移除最左端元素 this.objArr.shift(); } } })
</script>
|
3.2 v-model:获取和设置表单元素的值(双向数据绑定)
使用v-model可以设置表单的值,绑定的数据会和表单元素值相关联
1 2 3 4 5 6 7 8 9 10 11 12
| <div id="app"> <input type="text" v-model="message"> <h2>{{message}}</h2> </div> <script> var app = new Vue({ el:"#app", data:{ message:"程序员" } }) </script>
|
Vue网络应用
axios网络请求库
1 2 3 4
| <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
axios.get(地址?key=value&key2=value2).then(function(response){},function(err){}) axios.post(地址?key=value&key2=value2).then(function(response){},function(err){})
|
注意:axios回调函数中的this已经改变,无法获取Vue的data中数据,需要先在回调函数外部将this保存起来,例如:
然后在回调函数使用that