el挂载点
el:"挂载对象"
ID选择器
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>标签选择器</title>
</head>
<body>
<div id="app">
{{ message }}
</div>
<!引入开发环境版本>
<script src="https://cdn.jsdelivr.net/npm/vue.js"></script>
<script>
<!--一个新的vue实例-->
var app = new Vue({
el:"app",
data:{
message:"Hello Vue"
}
})
</script>
</body>
</html>
Vue对匹配标签里的元素进行渲染,渲染可继承
对象选择器
class="app"
el:".app",
标签选择器
el:"div",
不可以挂载到body与html
Vue会管理el选项命中的元素及其内部的后代元素
el用来设置Vue实例挂载的元素
Date数据对象
<div id="app">
{{ message }}
<h2> {{ school.name }} {{ school.mobile }}</h2>
<ul>
<li>{{ campus[0] }}</li>
<li>{{ campus[1] }}</li>
</ul>
</div>
<script>
var app = new Vue({
el:"#app",
data:{
message:"hello"
school:{
name:"a"
mobile:"b"
},
campus:["","",""]
}
})
<!DOCTYPE hmtl>
<html>
<head>
<meta charset="utf-8">
<title>数据</title>
</head>
<body>
<div id="app" class="app">
{{ message + " vue"}}
<h2>{{ school.name }} {{ school.mobile }}</h2>
<h2>{{ school }}</h2>
<ul>
<li>{{ array[0] }}</li>
<li>{{ array[1] }}</li>
</ul>
<h2>{{ array }}</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
//el:".app",
el:"#app",
//el:"div",
data:{
message:"hello",
school:{
name:"对象",
mobile:"123456"
},
array:["s","c","h","o"]
}
})
</script>
</body>
</html>
Vue 指令
v-text
设置标签的文本值
<div id="app">
<h2 v-text="message"></h2>//完全覆盖
<h2>深圳{{ message + "!"}}</h2>//差值表达式
</div>
var app=new Vue({
el:"#app",
data:{
message:"hello Vue"
}
})
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>命令</title>
</head>
<body>
<div id="app">
<h2 v-text="message">这里将被覆盖</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:"覆盖内容"
}
})
</script>
</body>
</html>
v-html
设置标签的innerHTML
如果是文本,与v-text没有区别,但如果是HTML,会被解析成语句
<div id="app">
<p v-html="content"></p>
</div>
var app = new Vue({
el:"#app"
date:{
content:"<a href='#'>gotyou</a>"
}
})
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v-html</title>
</head>
<body>
<div id="app">
<h2 v-html="message">hi</h2>
<h2 v-html="message2">hi</h2>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
message:"hello",
message2:"<a href='www.baidu.com'>hello</a>"
}
})
</script>
</body>
</html>
v-on基础
为元素绑定事件
<div id="app">
<input type="button" value="事件绑定" v-on:事件名="方法">l
事件名
点击:click
移入:monseenter
双击:dblclick
v-on可以换为@
</div>
var app = new Vue({
el:"#app"
方法写在这
methods:{
//逻辑
方法:function(){}
}
})
计数器
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>计数器</title>
</head>
<body>
<div id="app">
<button @click="sub">
-
</button>
<span>{{ num }}</span>
<button @click="add">
+
</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el:"#app",
data:{
num:0
},
methods:{
add:function(){
if(this.num<10){
this.num++;
}else{
alert("差不多得了");
}
},
sub:function(){
if(this.num>0){
this.num--;
}
else{
alert("有完没完");
}
}
}
})
</script>
</body>
</html>
v-show
根据表达值得真假,切换元素的显示和隐藏
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v-show</title>
</head>
<body>
<div id="app">
<img src="./测试.png" alt="图片加载失败" v-show="true">
<img src="./测试.png" alt="图片加载失败" v-show="age>=18">
<button @click="changeFun">
点我
</button>
<img src="./测试.png" alt="图片加载失败" v-show="isShow">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el:"#app",
data:{
isShow:false,
age:16
},
methods:{
changeFun:function(){
this.isShow = !this.isShow;
}
}
})
</script>
</body>
</html>
v-if
根据表达值得真假切换显示状态,操纵DOM元素而不是样式,也就是这个东西直接没了,而不是被隐藏了
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v-show</title>
</head>
<body>
<div id="app">
<p v-if="true">我是一个没有感情的标签</p>
<p @click="changefun" v-if="isshow">我也是一个没有感情的标签</p>
<p v-if="tem>5">我是一个没有感情的标签</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el:"#app",
data:{
isshow:true,
tem:0
},
methods:{
changefun:function(){
this.isshow=!this.isshow;
this.tem=10
}
}
})
</script>
</body>
</html>
v-bind
设置元素的属性
v-bind:属性名=表达式
鼠标悬停属性:title
<!--v-bind:属性名=表达式-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v-show</title>
<style>
.active{
border: 1px solid red;
}
</style>
</head>
<body>
<div id="app">
<img v-bind:src="imgSrc">
<br>
<img :src="imgSrc" alt="" :title="imgTitle+'!'" :class="isActive?'active':''" @click=toggleActive>
<!--img v-bind:title="imgTitle"-->
<!--img v-bind:class="isActive?'active':“”"-->
<!--img v-bind:class="{active:isActive}"-->
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el:"#app",
data:{
imgSrc:"./测试.png",
imgTitle:"测试图片",
isActive:false
},
methods:{
toggleActive:function(){
this.isActive=!this.isActive
}
}
})
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v-show</title>
</head>
<body>
<div id="mask">
<div class="center">
<h2 class="title">
hello!
<!--img src="./测试.png"-->
</h2>
<img :src="imgArr[index]" alt="加载失败">
<!--a href="javascript:void(0)" v-show="index!=0" @click="prev" class="left">
<img src="./头.png" alt="">
</a>
<a href="javascript:void(0)" v-show="index<imgArr.length-1" @click="next" class="right">
<img src="./头.png" alt="">
</a-->
<button v-show="index<imgArr.length-1" @click="next">
后一张
</button>
<button v-show="index!=0" @click="prev">
前一张
</button>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el:"#mask",
data:{
imgArr:[
"./测试.png",
"./测试2.png",
"./测试3.png",
"./测试4.png",
"./测试5.png"
],
index:0
},
methods:{
prev:function(){
this.index--;
},
next:function(){
this.index++;
}
}
})
</script>
</body>
</html>
v-for
根据数据生成列表结构(响应式)
<div id="app">
<ul>
<li v-for="item in arr">内容</li>
<li v-for="(item,index) in arr" :title="item">{{ index }}{{ item }}</li>
<li v-for="(item,index) in objArr">{{ item.name }}</li>
</ul>
</div>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v-show</title>
</head>
<body>
<div id="app">
<ul>
<!--li v-for="item in arr">内容</li-->
<!--li v-for="(item,index) in arr" :title="item">{{ item }}</li-->
<li v-for="item in arr">测试:{{ item }}</li>
</ul>
<br>
<ul>
<li v-for="(item,index) in arr">{{ index }} {{ item }}</li>
</ul>
<br>
<ul>
<li v-for="(item,index) in fruit" :title="item.name" @click="remove">{{ item }}</li>
</ul>
<br>
<ul>
<li v-for="(item,index) in fruit" @click="add">{{item.name}}</li>
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el:"#app",
data:{
//arr:[["北京","上海"],["广州","深圳"],["中山"]]
arr:["北京","上海","广州","深圳","中山"],
fruit:[
{name:"apple"},
{name:"banana"},
{name:"orange"}
]
},
methods:{
add:function(){
this.fruit.push({name:"strawberry"});
},
remove:function(){
this.fruit.shift();
}
}
})
</script>
</body>
</html>
v-on补充
传递自定义参数与事件修饰符
<div id="app">
<input type="button" @click="doit(p1,p2)"
<input type="text" @keyup.enter="sayHi">
</div>
var app=new Vue({
el:"#app",
methods:{
doit:function(p1,p2){},
sayHi:function(){}
}
})
v-model
获取和设置表单元素的值(双向数据绑定),同步更新
<!DOCTYPE hmtl>
<html>
<head>
<meta charset="utf-8">
<title>记事本</title>
</head>
<body>
<!--主题区域-->
<section id="todoapp">
<!--输入框-->
<header class="header">
<h1>记事本</h1>
<input v-model="inputValue" @keyup.enter="add" autofocus="autofocus" autocomplete="off" placeholder="请输入任务" class="new-todo">
</header>
<!--列表区域-->
<section class="main">
<ul class="todo-list">
<li class="todo" v-for="(item,index) in list">
<div class="view">
<span class="index">{{ index+1 }}.</span>
<label>{{ item }}</label>
<button class="destroy" @click="remove(index)">x</button>
</div>
</li>
</ul>
</section>
<!--统计与清空-->
<footer class="footer">
<span class="todo-count" v-if="list.length!=0"><strong>{{ list.length }}</strong> items left </span>
<button v-show="list.length!=0" class="clear-completed" @click="clear">
clear
</button>
</footer>
</section>
<!--底部-->
<footer class="info">
</footer>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#todoapp",
data:{
list:["写代码","吃饭","睡觉","打游戏"],
inputValue:"好好学习天天向上"
},
methods:{
add:function(){
this.list.push(this.inputValue);
},
remove:function(index){
this.list.splice(index,1);
},
clear:function(){
this.list=[];
}
}
})
</script>
</body>
</html>
axios
网络请求库
axios.get(地址?key=value&key2=value2).then(function(response){},function(err){})
axios.post(地址,key=value&key2=value2).then(function(response){},function(err){})
- axios必须先导入再使用
- 使用get或post方法即可发送对应的请求
- then方法中的回调函数会在请求成功或失败时触发
- 通过回调函数的形参可以获取响应内容或者错误信息
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>命令</title>
</head>
<body>
<input type="button" value="get请求" class="get">
<input type="button" value="post请求" class="post">
<!--script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script-->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
document.querySelector(".get").onclick = function() {
axios.get("https://autumnfish.cn/api/joke/list123455?num=6")
.then(function (response) {
console.log(response);
},function (err){
console.log(err);
})
}
document.querySelector(".post").onclick = function() {
axios.post("https://autumnfish.cn/api/user/reg",{username:"克"})
.then(function (response){
console.log(response);
},function (err){
console.log(err);
})
}
</script>
</body>
</html>
注意再axios内部,this已经改变
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>命令</title>
</head>
<body>
<div id="app">
<input type="button" value="获取笑话" @click="getJoke">
<p>{{ joke }}</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.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.data);
//console.log(that.joke);
that.joke=response.data;
},function(err){
console.log(err.data);
})
}
}
})
</script>
</body>
</html>
- axios回调函数中的this已经改变,无法访问到data中的数据
- 把this保存起来,回调函数中直接使用保存的this即可