Vue基础
第一章 简单介绍及入门
0 导入vue包
<!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
【更推荐开发环境版本,有帮助信息,更为完整】
<!-- 生产环境版本,优化了尺寸和速度 --> <script src="https://cdn.jsdelivr.net/npm/vue"></script>
1 声明式渲染:Vue.js的核心试试允许采用简洁的模板语法来声明式地将第一个例子:数据渲染进DOM的系统:
<div id="app"> {{ message }} </div> <script> var app=new Vue({ el:"#app", data:{ message:"youdianxiangnile,zhangmin!" } }) </script>
第二个例子:
<span v-bind:title="message">鼠标悬停查看message信息<span>
其中 v-bind 特性被称为指令,指令带有前缀 v- 是Vue提供的特殊特性。
<div id="app-2"> <span v-bind:title="message"> 鼠标悬停几秒查看此处动态绑定能够的提示信息! </span> </div> <script> var app2=new Vue({ el:"#app-2", data:{ message:'页面加载于'+new Date().toLocaleString() } }) </script>
第三个例子:
<div id="app3"> {{ message }} <h2>学校名称:{{ school.name }} 。学校电话:{{school.mobile}}</h2> <ul> <li>{{ campus[0] }}</li> <li>{{ campus[1] }}</li> </ul> </div> <script> var app3=new Vue({ el:"#app3", data:{ message:"nihao,xiaozhang!", //定义一个类 school:{ name:"xiaoming", mobile:"400-456-1022" }, //定义一个数组 campus:["武汉校区","重庆校区","成都校区","大同校区"] } }) </script>
注意:
(1)el 挂载点
- Vue 实例的作用范围:vue会管理el命中的元素及其内部的后代元素;
- Vue 可以使用class 等多种选择器,但是一般建议选择id选择器
- Vue 可以设置其他dom元素,如h1 p div,但是不能使用html和body
(2)data 数据对象
- Vue中用到的数据定义在data中
- data中可以写复杂类型的数据
- 渲染复杂类型数据时,遵守js语法即可
第二章 本地应用
1 内容绑定与事件绑定
(1) v-text
作用是设置标签的内容textContent
默认写法将一个dom标签里面的所有文本进行替换,如果是部分文本替换,建议还使用 两个大括号 哈
<div id="app">
{{ message }}
<h2 v-text="message+'enen1'"></h2>
</div>
(2)v-html
作用是设置元素的innerHTML,内容中有html结构会被解析为标签
<div id="app"> <p v-html="content1"></p> <p v-html="content2"></p> <p v-text="content2"></p> </div> <script> var app=new Vue({ el:"#app", data:{ content1:"战胜Frank", content2:"<a href='https://www.baidu.com/'>百度</a>" } }) </script>
(3)v-on
- 为元素绑定事件,其中 v-on可以使用@进行替换,绑定方法可以写在methods属性中,方法内部中数据的获取可以使用this关键字
<div id="app"> <input type="button" value="v-on指令1" v-on:click="doIt" /> <input type="button" value="双击简写2" @dblclick="doIt" /> <h2 @click="changefood">{{ food }}</h2> </div> <script> var app=new Vue({ el:"#app", data:{ food:"番茄炒鸡蛋" }, methods:{ //doIt 是在制定#app中的制定methods doIt:function(){ alert("做IT!"); }, //数据更改,this关键字 changefood:function(){ this.food+="炒糊了!" } } }) </script>
- 事件绑定的方法写成函数调用的形式,可以传入自定义参数
定义方法的时候需要定义形参来接收传入的实参
事件后面跟上 .修饰符 可以对事件进行限制,其中.enter为限制触发的按键为回车
<div id="app"> <button @click="doIt(666,'老铁')">doIt</button> <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); console.log(p2); }, sayHi:function(){ alert("早上好!"); } } }) </script>
(4)一个计数器的简单例子
<div id="compute"> <button @click="sub">-</button> <span>{{ num }}</span> <button @click="add">+</button> </div> <script> var com=new Vue({ el:"#compute", data:{ num:1 }, methods:{ add:function(){ if(this.num<10) { this.num++; } else{ alert("已经达到最大值!"); } }, sub:function(){ if(this.num>0) { this.num--; } else{ alert("已经达到最小值!"); } } } }) </script>
(5)v-show
切换元素的显示与不显示,其中还原理是改变style中的display
<div id="app"> <button @click="changeIsShow">切换</button> <p v-show="isShow">你好呀!</p> </div> <script> var app=new Vue({ el:"#app", data:{ isShow:true }, methods:{ changeIsShow:function(){ this.isShow=!this.isShow; } } }) </script>
(6)v-if
根据表达式的值(真假)设置元素的显示状态,本质上是通过操纵dom元素来切换显示状态,表达式为true元素存在dom树中,反之则反。
<div id="app"> <button @click="changeIsShow">切换</button> <p v-if="isShow">你好呀!</p> </div> <script> var app=new Vue({ el:"#app", data:{ isShow:true }, methods:{ changeIsShow:function(){ this.isShow=!this.isShow; } } }) </script>
(7)v-band 可以直接使用 : 简写
设置元素的属性(src class title),如果是class推荐使用对象的方式来写
<style> .active{ border:1px solid red; } </style> <div id="app"> <img v-bind:src="imgSrc"/> <br /> <img :src="imgSrc" :title="imgTitle+'哈哈哈哈'" /> <br /> <!-- 以判断表达式的方式来写--> <img :src="imgSrc" :class="isActive?'active':''" @click="toggleActive"/> <br /> <!-- 以对象的方式来写,active类名是否生效由isActive决定--> <img :src="imgSrc" :class="{active:isActive}" @click="toggleActive"/> </div> <script> var app=new Vue({ el:"#app", data:{ imgSrc:"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3698288116,4248139335&fm=26&gp=0.jpg", imgTitle:"这是一个title", isActive:false }, methods:{ toggleActive:function(){ this.isActive=!this.isActive; } } }) </script>
(8) v-for
根据数据生成列表结构,数据经常和v-for结合使用,
语法 (item,index) in 数据【其中item名字可以改】
数组长度的更新会同步到页面上面,是响应式的
<div id="app"> <ul> <li v-for="(item,index) in arr"> {{index+1}} 城市:{{item}} </li> </ul> <button @click="add">加菜</button> <button @click="remove">减菜</button> <h2 v-for="it in cai" v-bind:title="it.name">{{it.name}}</h2> </div> <script> var app=new Vue({ el:"#app", data:{ arr:["北京","大同","成都","重庆"], cai:[ {name:"番茄炒鸡蛋"}, {name:"青椒土豆丝"} ] }, methods:{ add:function(){ this.cai.push({name:"干锅花椰菜"}); }, remove:function(){ this.cai.shift(); } } }) </script>
(9)v-model
获取和设置表单元素的值(双向数据绑定,更改表单中数据 vue里面值也会改变)
<div id="app"> <button @click="setM">修改值</button> <input type="text" v-model="message" @keyup.enter="getM"> <h2>{{message}}</h2> </div> <script> var app=new Vue({ el:"#app", data:{ message:"战神FRANK" },methods:{ getM:function(){ alert(this.message); }, setM:function(){ this.message="你是不是傻"; } } }) </script>
第三章 网络应用
(1)axios 强大的网络请求库
- axios必须先导入才可以使用,
- 使用get或post方法即可发送对应的请求,
- then方法中的回调函数会在请求成功或失败时触发,
- 通过回调函数的形参可以获取响应的内容,或错误信息
- 官网:https://github.com/axios/axios
需要在头文件导入的包
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
get和post请求模板
- axios.get(地址?key=value&key2=values)aa.them(function(response){},function(err){})
- axios.post(地址,{key:value,key2:value2}).then(function(response){},function(err){})
(2)axios+vue
- axios回调函数中的this已经改变,无法访问到vue中data的数据,
- 可以将this用一个变量保存起来,直接在回调函数中调用就行了
<div id="app"> <button @click="getJoke">获取笑话</button> <p>{{joke}}</p> </div> <script> var app=new Vue({ el:"#app", data:{ joke:"这是一个很好看的笑话" },methods:{ getJoke:function(){ var that=this; axios.get("https://autumnfish.cn/api/joke").then (function(response){ console.log(response); console.log(response.data); that.joke=response.data; }),function(err){ console.log(err) } } } }) </script>