Vue.js
官网:https://cn.vuejs.org/
开发环境:适用于学习 提示较多
vue+axios
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
生产环境:性能高
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
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>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
</body>
</html>
第一个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>vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{message}}
</div>
<script>
var app = new Vue({
el: "#app",
data: {
message: "hello vue"
}
})
</script>
</body>
</html>
el: 挂载点,绑定id
vue实例的作用范围: vue管理el选项命中的元素及其内部的后代元素
选择器:尽量使用id选择器
是否可以设置其他dom元素:尽量使用div 没有样式,不能使用html和body
data:
<!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>data</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{message}}
<h1>{{school.name}}</h1>
<h1>{{school.address}}</h1>
<ul>
<li>{{hobby[0]}}</li>
</ul>
</div>
<script>
var app = new Vue({
el : "#app",
data: {
message : "阿鬼大大",
school:{
name:"西安石油大学",
address:"西安"
},
hobby:["吃饭","睡觉","想媳妇"]
}
})
</script>
</body>
</html>
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>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h2 v-text="message+'!'">测试</h2>
<h2>{{message}}测试!</h2>
</div>
<script>
var app = new Vue({
el:"#app",
data:{
message: "阿鬼大大!!!"
}
})
</script>
</body>
</html>
- v-text 会覆盖原来的所有内容
- 添加的时候使用插值表达式,字符串连接用单引号
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>v-html</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h2 v-html="message"></h2>
<h2 v-text="message"></h2>
</div>
<script>
var app = new Vue({
el: "#app",
data: {
message: "<a href = 'data.html'>百度</a>"
}
})
</script>
</body>
</html>
v-on
- 可以使用@代替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>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="点击测试" v-on:click="doit"></input>
<input type="button" value="编辑测试" @click="doit"></input>
<input type="button" value="双击测试" @dblclick="doit"></input>
<h1 @click="changeMessage">{{message}}</h1>
</div>
<script>
var app = new Vue({
el:"#app",
data:{
message:"阿鬼大大"
},
methods:{
doit:function(){
alert("doit")
},
changeMessage:function(){
this.message+="+1111==>"
}
}
})
</script>
</body>
</html>
v-show
- 作用:切换元素显示的状态
- 原理是修改display,若为true则显示,若为false 则显示隐藏
- 指令后面的值都为布尔值
<!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>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<div id="app">
<!-- <img v-show="flag" src="/img/4-1Z126160112.jpg" alt="" > -->
<img v-show="age>20" src="/img/4-1Z126160112.jpg" alt="" >
<h1>{{flag}}</h1>
<h1>{{age}}</h1>
<input type="button" value="点一下试试" @click="test"></input>
<input type="button" value="增加年龄" @click="addAge">
</div>
<body>
<script>
var app = new Vue({
el:"#app",
data:{
flag:true,
age:20
},
methods:{
test:function(){
this.flag=!this.flag;
},
addAge:function(){
this.age++;
}
}
})
</script>
</body>
</html>
v-if
- 切换元素的显示状态
- 本质是通过操作dom元素进行切换的,而操作dom元素比较浪费资源,所以一般都是使用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>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="测试" @click="addAge">
<h1>{{age}}</h1>
<h1 v-show="age>20">{{age}}</h1>
<h1 v-if="age>20">{{age}}</h1>
</div>
<script>
var app = new Vue({
el: "#app",
data: {
age: 20
},
methods:{
addAge:function(){
this.age++;
}
}
})
</script>
</body>
</html>
v-bind
- 绑定,将数据和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>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h1>{{imgUrl}}</h1>
<img :src="imgUrl" alt="" :title="isTitle">
</div>
<script>
var app = new Vue({
el: "#app",
data: {
imgUrl: "/img/4-1Z126160112.jpg",
isTitle: "测试"
}
})
</script>
</body>
</html>
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>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in address">{{item}}</li>
</ul>
<h1 v-for="item in foods">{{item.name}}</h1>
<input type="button" value="add" @click="add">
<input type="button" value="delete" @click="delete1">
</div>
<script>
var app = new Vue({
el:"#app",
data: {
index:0,
address:["北京","上海","广州","深圳"],
foods:[
{name:"土豆炒马铃薯"},
{name:"西红柿炒番茄"}
]
},
methods:{
add:function(){
this.foods.push({name:"西红柿炒鸡蛋"});
},
delete1:function(){
this.foods.shift();
}
}
})
</script>
</body>
</html>
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>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h1>{{message}}</h1>
<input type="button" value="测试" @click="test1('哈哈哈1',666)">
<input type="text" @keyup.enter="test">
</div>
<script>
var app = new Vue({
el:"#app",
data:{
message:"haha"
},
methods:{
test:function(){
alert("弹出成功")
},
test1:function(p1,p2){
alert(p1);
console.log(p2);
}
}
})
</script>
</body>
</html>
v-model
双向绑定,数据和div中的同时绑定起来
<!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>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="test" @click="setM">
<input type="text" v-model="message" @keyup.enter="getM">
<h1>{{message}}</h1>
</div>
<script>
var app = new Vue({
el:"#app",
data:{
message:"阿鬼大大"
},
methods:{
getM:function(){
alert(this.message)
},
setM:function(){
this.message="哈哈哈"
}
}
})
</script>
</body>
</html>
vue+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>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="获取笑话" @click="fun1">
<span>{{message}}</span>
</div>
<script>
var app = new Vue({
el: "#app",
data: {
message:"笑话"
},
methods:{
fun1:function(){
var that = this;
axios.get( "https://autumnfish.cn/api/joke").then(
function(rep){
console.log(rep.data);
that.message=rep.data;
}
)
}
}
})
</script>
</body>
</html>
music播放器
<!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>阿鬼大大的player</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="queryString" @keyup.enter="getMusic">
<ul>
<li v-for="list in musicList">
<span>
{{list.name}}
{{list.id}}
<a type="button" @click="player(list.id)">点击播放</a>
</span>
</li>
</ul>
<div>
<audio autoplay="true" controls="controls" :src="musicUrl"></audio>
</div>
</div>
<script>
var app = new Vue({
el: "#app",
data: {
queryString:"陈" ,
musicList: [],
musicUrl: ""
},
methods:{
getMusic:function(){
var that=this;
axios.get("https://autumnfish.cn/search?keywords="+this. queryString).then((rep)=>{
console.log(rep.data.result);
that.musicList=rep.data.result.songs;
})
},
player:function(musicId){
var that = this;
axios.get("https://autumnfish.cn/song/url?id="+musicId).then((rep)=>{
console.log(rep.data.data[0].url);
that.musicUrl=rep.data.data[0].url;
})
}
}
})
</script>
</body>
</html>