Vue
文章目录
1. Vue基础
1.1 第一个Vue程序
- 引入
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!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:"hello Vue" }
})
</script>
</body>
</html>
1.2 el挂载点
- 作用范围
<!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>
{{message}}
<div id="app">
{{message}}
<p>
{{message}}
</p>
</div>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
message:"hello Vue" }
})
</script>
</body>
</html>
作用于:el命中的元素内部,以及内部的后代元素
- 可以使用其他选择器,但建议使用id选择器
<!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>
{{message}}
<div id="app" class="app">
{{message}}
<p>
{{message}}
</p>
</div>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
// el:"#app",
el:".app",
data:{
message:"hello Vue" }
})
</script>
</body>
</html>
- 可以使用其他的双标签,但不能使用HTML和BODY
1.3data数据对象
<!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}}
<h2>{{school.name}}</h2>
<ul>
<li>campus[0]</li>
<li>campus[1]</li>
<li>campus[2]</li>
</ul>
</div>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
message:"hello Vue",
school:{
name:"王一博",
tel:"212313131"
},
campus:["北京校区","上海","广州"]
}
})
</script>
</body>
</html>
2.本地应用
2.1 v-text
<!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>v-text指令</title>
</head>
<body>
<div id="app">
<h2 v-text="message+'!'">上海</h2>
<h2 v-text="info+'!'">上海</h2>
<h2>{{message+'!'}}深圳</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
message:"我看着你的脸轻刷着和弦",
info:"或许去看看沙滩"
}
})
</script>
</body>
</html>
- 默认写法会替换全部内容,使用**差值表达式{{}}**可以替换指定内容
2.2 v-html
<!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">
<p v-html="context"></p>
<p v-text="context"></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
context:"<a href='http://www.baidu.com'>百度</a>"
}
})
</script>
</body>
</html>
2.3 v-on
- 为元素绑定事件
<!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">
<input type="button" value="v-on指令" v-on:click="dofun">
<input type="button" value="v-on简写" @click="dofun">
<input type="button" value="v-on指令" @dblclick="dofun">
<h2 @click="changeFood">{{food}}</h2>
</div>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
food:"土豆"
},
methods:{
dofun:function(){
alert("周杰伦");
},
changeFood:function(){
this.food+="鸡蛋"
}
},
})
</script>
</body>
</html>
注意:方法名不能用do
2.4 计数器
<!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>计数器</title>
</head>
<body>
<div id="app">
<!-- 计数器功能区域 -->
<div class="input-num">
<button @click="sub">
-
</button>
<span>{{num}}</span>
<button @click="add">
+
</button>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
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>
</body>
</html>
2.5 v-show
-
根据表达式值的真假,切换元素的显示和隐藏
<!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>Document</title> </head> <body> <div id="app"> <input type="button" value="累加年龄" @click="addAge"> <input type="button" value="切换显示状态" @click="changeIsShow"> <img v-show="isShow" src="img/1.png" alt=""> <img v-show="age>=18" src="img/1.png" alt=""> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app=new Vue({ el:"#app", data:{ isShow:false, age:17 }, methods:{ changeIsShow:function(){ this.isShow=!this.isShow; }, addAge:function(){ this.age++; } } }) </script> </body> </html>
2.6 v-if
<!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>Document</title>
</head>
<body>
<div id="app">
<input type="button" value="切换显示" @click="toggleIsShow">
<p v-if="isShow">颓废</p>
<p v-show="isShow">颓废 v-show修饰</p>
<h2 v-if="temperture>=35">热死了</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
isShow:false,
temperture:20
},
methods:{
toggleIsShow:function(){
this.isShow=!this.isShow;
}
}
})
</script>
</body>
</html>
2.7 v-bind
<!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>Document</title>
<style>
.active{
border:1px solid red;
}
</style>
</head>
<body>
<div id="app">
<img v-bind:src="imgSrc" alt="">
<br>
<img :src="imgSrc" alt="" :title="imgTitle+'!!!!'" :class="isActive?'active':''" @click="toggleActive">
<br>
<img :src="imgSrc" alt="" :title="imgTitle+'!!!!'" :class="{active:isActive}" @click="toggleActive">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
imgSrc:"img/2.png",
imgTitle:"歌曲",
isActive:false
},
methods:{
toggleActive:function(){
this.isActive=!this.isActive;
}
}
})
</script>
</body>
</html>
2.8 图片切换
<!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>轮播图</title>
</head>
<body>
<div id="mask">
<!-- 图片 -->
<img src="imgArr[index]" alt=""/>
<!-- 左箭头 -->
<!-- <a href="javascript:void(0)" class="left" @click="prev" v-show="index!=0">
<img src="/img/left.png" alt="" >
</a> -->
<a href="javascript:void(0)" class="left" @click="prev" v-if="index!=0">
<img src="/img/left.png" alt="" >
</a>
<!-- 右箭头 -->
<a href="javascript:void(0)" class="right" @click="next" v-show="index<imgArr.length-1">
<img src="/img/right.png" alt="">
</a>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#mask",
data:{
imgArr:[
" \img\1.png",
"\img\2.jpg",
"\img\3.jpg",
"\img\4.jpg",
"\img\5.jpg",
"\img\left.png",
"\img\right.png"
],
methods:{
prev:function(){
this.index--;
},
next:function(){
this.index++;
}
}
}
})
</script>
</body>
</html>
2.9 v-for
<!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>Document</title>
</head>
<body>
<div id="app">
<input type="button" value="添加数据" @click="add">
<input type="button" value="移除数据" @click="remove">
<ul>
<li v-for="item in arr">
告五人:{{item}}
</li>
<li v-for="(item,index) in arr">
{{index+1}}告五人:{{item}}
</li>
</ul>
<h2 v-for="item in vegetables" v-bind:title="item.name">
{{item.name}}
</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
arr:["丑人多作怪","爱人错过","带我去找夜生活","披星戴月的想你"],
vegetables:[
{name:"土豆"},
{name:"鸡蛋"}
]
},
methods:{
add:function(){
this.vegetables.push({name:"花菜炒蛋"});
},
remove:function(){
this.vegetables.shift();
}
}
})
</script>
</body>
</html>
2.10 v-model
- 获取和设置表单元素的值(双向数据绑定)
<!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>Document</title>
</head>
<body>
<div id="app">
<input type="button" value="修改meassage" @click="setM">
<input type="text" v-model="message" @keyup.enter="getM">
<h2>{{message}}</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
message:"薛之谦"
},
methods:{
getM:function(){
alert(this.message);
},
setM:function(){
this.message="疯人院"
}
}
})
</script>
</body>
</html>
2.11 记事本
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>记事本的综合案例</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="addTXT"> <input type="button" value="添加到记事本" @click="addReadTXT">
<br>
<ul style="list-style-type: none">
<li v-for="s,index in readTXTs">{{index+1}},{{s}}
<a href="javascript:;" @click="delReadTXT(index)">删除当前记录</a>
</li>
</ul>
<br>
<span>总数量:{{readTXTs.length}}条</span><input type="button" value="删除所有" @click="delAll" v-if="readTXTs.length!=0">
</div>
</body>
<script>
const app = new Vue({
el: "#app",
data: {
addTXT: "",
readTXTs: ["第一次记事", "第二次记事"],
},
methods: {
addReadTXT() {/*添加到记事本方法*/
if (this.addTXT != "") {
console.log(this.addTXT);
this.readTXTs.push(this.addTXT);
this.addTXT = "";
} else alert("请输入内容");
},
delReadTXT(index) {/*删除记录*/
this.readTXTs.splice(index, 1);/*参数1:从哪个下标开始删除;参数2:删除几个元素*/
},
delAll() {/*删除所有*/
if (this.readTXTs.length > 0)
this.readTXTs = [];
else alert("已经删除完毕");
}
},
});
</script>
</html>
3. 网络应用
3.1 axios
- 功能强大的网络请求库
<!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>Document</title>
</head>
<body>
<input type="button" value="get请求" class="get">
<input type="button" value="post请求" class="post">
<!-- 导入axios的官方文件 -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
document.querySelector(".get").onclick=function(){
axios.get("https://autumnfish.cn/api/joke/list?num=6")
.then(function(response)
{
console.log(response);
},function(err){
console.log(err);
})
}
document.querySelector(".post").onclick=function(){
axios.get("https://autumnfish.cn/api/user/reg",{username:"王一博"})
.then(function(response)
{
console.log(response);
},function(err){
console.log(err);
})
}
</script>
</body>
</html>
- axios必须先导入才可以使用
- 使用get或post方法即可发送对应的请求
- then方法中的回调函数会在请求成功或者失败时发送
- 通过回调函数的形参可以获取相应内容,或者错误信息
3.2 axios与vue结合使用
<!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>Document</title>
</head>
<body>
<div id="app">
<input type="button" value="获取笑话" @click="getJoke">
<p>{{joke}}</p>
</div>
<!-- 导入axios的官方文件 -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
joke:"很好笑的笑话"
},
methods:{
getJoke:function(){
// console.log(this.joke);
var that=this;
axios.get("https://autumnfish.cn/api/joke").then
(function(response){
// console.log(response)
console.log(response.data);
// console.log(this.joke);
that.joke=response.data;
},function(err){})
}
}
})
</script>
</body>
</html>