1.Vue框架
渐进式的JS框架,作者尤雨溪
必须要引用的一段代码:
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
2.Vue插值语法
{{ }}是vue的插值语法,可以获取data的数据,同时支持简单的逻辑运算和js函数
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<title>Document</title>
</head>
<body>
<div id="app">
<h1>{{name}}:{{age}}</h1>
</div>
</body>
</html>
<script>
//插值语法本质上是一种获取值的用法,通过{{}}的写法获取相应的data中的内容
new Vue({
el:'#app',//id为app
data:{
name:'张三',
age:30
}
});
</script>
3.Vue指令
ES6
1.导入vue.js文件
2.vue实例对象只有一个,并且需要挂载到页面中的某个元素,一般是div元素
3.data:vue实例中用于存储数据的属性
3.1 v-text、v-html
v-text用来获取data中数据将数据以文本的形式渲染到指定标签内部
v-html用来获取data中数据将数据中含有的html标签先解析在渲染到指定标签的内部
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<title>Document</title>
</head>
<body>
<div id="app">
<h1>{{text}} </h1>
<h1 v-text="text"> </h1>
<h1 v-html="html"> </h1>
</div>
</body>
</html>
<script>
new Vue({
el:'#app',
data:{
text:"<a href=''>我是v-text显示的内容</a>",
html:"<a href=''>我是v-html显示的内容</a>"
}
});
</script>
代码中data的text虽然用了a href的语法,但是在<h1 v-text="text"> </h1>显示的依旧是文本格式

3.2 v-on
v-on的案例:通过两个按钮控制页面数字增加和减少
v-on中较为重要的是v-on:click以及@click,一般情况下,可以直接只用@click来引用方法
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<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">
<button v-on:click="increase">+</button>
<span>{{count}}</span>
<button @click="decrease">-</button>
</div>
</body>
</html>
<script>
new Vue({
el:'#app',
data:{
count:1
},
methods:{
increase(){
this.count++;
},
decrease(){
this.count--;
}
}
});
</script>
3.3 v-if
v-if:用来控制页面元素是否展示
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<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">
<span style="color: red" v-if="nameFlag">admin</span>
<a href="#" v-if="loginFlag" @click="login">登录</a>
<a href="#" v-if="logOutFlag" @click="logOut">退出</a>
</body>
</html>
<script>
new Vue({
el:'#app',
data:{
//上方的v-if="nameFlag"以及其他两个v-if,都是控制页面内容是否展示,
// v-if="nameFlag",nameFlag:false则表示admin这个内容最开始不展示出来
nameFlag:false,
loginFlag:true,
logOutFlag:false
},
methods:{
//@click="login"是v-on的写法,将上方的登录与login()方法绑定
login(){
this.reverse();
},
logOut(){
this.reverse();
},
reverse(){
//登录和退出时的ture和false情况刚好相反,因此写了reverse方法,login和logOut直接调用reverse方法即可
this.nameFlag=!this.nameFlag;
this.loginFlag=!this.loginFlag;
this.logOutFlag=!this.logOutFlag;
}
}
});
</script>
3.4 v-for
v-for:用来对对象进行遍历,包括数组
主要内容:v-for="(item,index) in users"代码中item和index都是自己可以随意命名的内容,只不过item部分刚好是users数组里面的具体内容,index是索引的作用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<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">
<p v-for="(item,index) in users">
{{item.name}}:{{item.age}}//插值引用
</p>
</div>
</body>
</html>
<script>
new Vue({
el:'#app',
data:{
users:[
{
name:'张三',
age:20
},
{
name:'李四',
age:30
}
]
}
});
</script>
3.5 v-model
绑定输入框数据,能够实现页面数据和vue实例数据进行双向绑定

第一种写法:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<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>
</html>
<body>
<div id="app">
<input type="number" v-model="result.num"/><br>
<span>总价:{{result.num*price}}</span>
</div>
</body>
</html>
<script>
new Vue({
el:'#app',
data:{
result:{
num:0
},
price:10
}
});
</script>
num:0 或者 **num:' '**的写法都成立
第二种方法
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<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>
</html>
<body>
<div id="app">
<input type="number" v-model="num"/><br>
<span>总价:{{num*price}}</span>
</div>
</body>
</html>
<script>
new Vue({
el:'#app',
data:{
num:0,
price:10
}
});
</script>
3.6购物车例题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=<device-width>, initial-scale=1.0">
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<title>Document</title>
<style>
table{
text-align: center;
width: 500px;
height: 300px;
}
input{
width: 30px;
}
</style>
</head>
<body>
<div id="app">
<table border="1px" align="center">
<caption>
<h3>购物车</h3>
</caption>
<tr>
<th>商品编号</th>
<th>商品名称</th>
<th>商品单价</th>
<th>购买数量</th>
<th>操作</th>
</tr>
<tr v-for="(good,index) in goods">
<td>{{good.id}}</td>
<td>{{good.name}}</td>
<td>{{good.price}}</td>
<td>
<button @click="increase(good)">+</button>
<input type="number" v-model="good.num" />
<button @click="decrease(good)">-</button>
</td>
<td>
<a href="#" @click="del(index)">删除</a>
</td>
</tr>
<tr>
<td colspan="5">
<a href="#" @click="clear">清空购物车</a>
<span>商品总价:{{total}}</span>
</td>
</tr>
</table>
</div>
</body>
</html>
<script>
new Vue({
el:'#app',
data:{
goods:[
{id:1,name:'红米note50',price:2000,num:0},
{id:2,name:'辣条10袋',price:3000,num:0},
{id:4,name:'迷你电动车',price:5000,num:0},
{id:5,name:'小米电视机',price:2000,num:0},
],
total:0
},
methods:{
increase(good){
good.num++;
this.caculate();
},
decrease(good){
if(good.num > 0){
good.num--;
}
this.caculate();
},
del(index){
this.goods.splice(index,1);
},
clear(){
this.goods = null;
},
caculate(){
let money = 0;
for(let good of this.goods){
money += good.price * good.num;
}
this.total = money;
}
}
});
</script>
4.Axios
Axios是一个基于promise的HTTP库,可以用在浏览器和node.js 中,其中必须要用到的代码是:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
Axios请求后端数据:异步请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style>
table{
text-align: center;
width: 500px;
height: 300px;
}
</style>
</head>
<body>
<div id="app">
<button @click="queryAll">查询数据</button>
<table v-if="show" border="1px" align="center">
<caption>
<h3>工作历史</h3>
</caption>
<tr>
<th>用户编号</th>
<th>公司名称</th>
<th>工作年限</th>
<th>描述</th>
<th>操作</th>
</tr>
<tr v-for="(jobHistory,index) in jobHistories">
<td>{{jobHistory.user_id}}</td>
<td>{{jobHistory.comp_name}}</td>
<td>{{jobHistory.years}}</td>
<td>{{jobHistory.title}}</td>
<td>
<button>删除</button>
</td>
</tr>
</table>
</div>
</body>
</html>
<script>
new Vue({
el: '#app',
data: {
show:false,
jobHistories:[]
},
methods: {
queryAll() {
this.show = true;
// let _this = this;
axios.get('http://localhost:8080/user/list')
.then(response=>{
this.jobHistories = response.data;
})
.catch(function (error) {
console.log(error);
});
}
}
});
</script>