1、简单易学:vue的文档为中文文档,便于学习和理解。
2、灵活高效:不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。20kB min+gzip运行大小,超快虚拟DOM。
3、双向数据绑定:通过MVVM思想实现数据的双向绑定,让数据操作更简单。
4、组件化开发:Vue.js通过组件,把一个单页应用中的各种模块拆分到一个一个单独的组件中,实现了html的封装和重用。
5、Virtual DOM:Virtual DOM则是虚拟DOM的英文,dom操作非常耗费性能,而虚拟DOM操作属于预处理操作,极大解放dom操作。
我们在写代码之前, 先讲解一下Vue框架的语法格式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- 推荐大家都用id id是唯一的 -->
<div id="app">
</div>
<script src="vue.js"></script>
<script>
// js代码块, Vue就在这里面写
</script>
</body>
</html>
// 有一个必须要写的, 就是el
// el叫做挂载点, 你要将Vue这个框架 在哪里使用
new Vue({
el: "#app",
data: {
// 数据源
}
});
Vue框架需要用到的资源文件:
vue.js
如何下载?
我们打开cmd
然后将路径切换到桌面
最后用curl -o 文件名(带后缀) url(就是网上的文件路径url)
操作截图如下:

cd Desktop
curl -o vue.js http://121.40.144.4:880/VueResource/vue.js
还有一个是axios.js文件, 这个文件在之后我们学习axios知识的时候, 我们再去下载, 下载方法和vue.js文件时一样的。
注意: 在html里面, 必须引入vue.js文件, 不然的话就不能使用vue框架。
列表渲染指令, 我们需要在html里面使用{{}}, 在两个花括号中间, 写上你要渲染的对象, 你想在哪里使用就在哪里使用。
举例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- 在这个div里面 使用内容渲染指令 -->
<!-- 写上连个{{}}在{{}}中间写上你要渲染的对象 你想在哪里使用就在哪里使用 -->
<div id="app">
{{name}} {{age}}
我是{{name}}, 今年{{age}}岁了
</div>
<script src="vue.js"></script>
<script>
// 有一个必须要写的
// el叫做挂载点, 你要将Vue这个框架 在哪里使用
// 推荐大家都用id id是唯一的
new Vue({
el: "#app",
data: {
name: "Nathan",
age: 20
}
});
</script>
</body>
</html>
结果:

第一行{{name}} {{age}}这个代码, 打印了Nathan和20
第二行我是{{name}}, 今年{{age}}岁了, 打印了"我是Nathan, 今年20岁了"。
因为我们在data里面, 写好了Nathan和age两个变量, 我们就可以在html里面通过{{你要渲染的对象(比如name或age)}}来渲染到页面上。
这里面有个关键字, v-for, 在html的标签上面使用。
这个标签是Vue带的功能, 普通网页开发不具备这种功能。
v-for里面怎么写呢? 它的语法长什么样?
接下来我们上代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style></style>
</head>
<body>
<div id="app">
<!-- 通常我们一般 给他加上一个:key 能够提高渲染性能 不加不会报错 -->
<div class="a" v-for="item in list" :key="item.id">
{{item.name}}
{{item.age}}
</div>
</div>
<script src="vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
// 数组里面是对象
list: [{
id: 1,
name: "Nathan",
age: 20
}, {
id: 2,
name: "Mickey",
age: 19
}, {
id: 3,
name: "Bredenn",
age: 19
}]
}
});
</script>
</body>
</html>
这串html的代码, 在做一件关于把列表里面的数据渲染到页面上面的事情。
运行结果:

我们不难看出, v-for相当于是个for循环, 语法格式为v-for="item in list"。这里面的list就是可迭代对象(列表), 比如列表,item就是每一次循环都获取list里面的值。
每一次获取到的item, 都是list里面的一个对象, 如果还在页面上把值渲染出来, 我们用了{{item.name}}和{{item.age}}的写法。
v-for里面的写法和python比较相似。
for item in list:
pass
后面的:key="item.id"的这个:key建议加上, 不加上也不会报错但是会影响开发性能。
注意:这个key一定是唯一的。
v-for="(item, index) in list", 后面的:key="index", 就是将索引作为:key。
注意: index需要写道item后面
关键字: methods, 写在data的后面, methods也是键值对。
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="app">
<!-- 事件绑定指令 -->
<button type="button" @click="a">点击按钮 触发一个事件</button>
<button type="button" @click="b">点击我 让我修改message的值以及出发a事件函数</button>
<p>{{message}}</p>
</div>
<script src="vue.js"></script>
<script>
// 有一个必须要写的
// el叫做挂载点, 你要将Vue这个框架 在哪里使用
// 推荐大家都用id id是唯一的
new Vue({
el: "#app",
data: {
message: 'hello vue'
},
// 事件绑定指令 在Vue里面 也是有事件的 数据都要放到data里面
methods: {
// 事件源 专门用来放事件的 所有的事件都要放到methods里面
// 第一个事件 其实就是函数
a() {
alert("这是事件 被触发了");
},
// 多个事件之间需要用, 隔开
// 点击 改变data数据源里面的message
b(){
// 注意: 你想在数据源中访问 data数据源里面的数据 必须使用this来访问
// this是js里面的指针
console.log(this);
// 注意:不加this会报错, 我们想要在函数里面获取data数据源的变量的话, 就必须使用this关键字, this,message
this.message = "今天礼拜一";
// 我想在事件b里面调用事件a
this.a();
}
}
});
</script>
</body>
</html>
触发按钮点击事件用的是@click="函数名"。
结果:


我们不难看到, 点击第一个按钮时, 会弹出框, 里面写了"这是事件 被触发了"。
点击第二个按钮的时候, 不仅弹出了框, 而且文字信息从"hello vue"改为了"今天礼拜一"。
控制台信息:

当我们点击第二个按钮的时候, 控制台会出现这一些信息。
就是console.log(this);这一行代码的信息。
我们可以看到, 控制台打印this的信息, 里面有个message字段, 所以我们可以通过this.message来获取字段的值, 同时也可以用this.message = "新值"这样来设置值。
注意:
如果上面的代码在javascript代码块里面变量名前不加this, 比如直接是message不是this.message, 那程序会报错。
关键字: v-model
我们写一个案例: 通过v-model和input组件双向绑定, 来实现实时渲染输入框里面的值。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="app">
<!-- 2.双向绑定指令 一般都是用在输入框里面 -->
<!-- 如何使用双向绑定 必须在input里面 写上一个v-model -->
<!-- 和数据源data的数据进行绑定 -->
{{message}}
<input type="text" v-model="value" />
{{value}}
</div>
<script src="vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
message: "hello vue",
value: ''
}
});
</script>
</body>
</html>
结果:

我们可以看到, 我们在输入框里面输入什么内容, 在页面上面就会渲染什么内容。
这里有两种,v-if和v-show
在标签里面加上v-if 如果值为真 就是显示 如果值为假 就是隐藏。
v-if还要一个兄弟 叫做v-show
这两种标签, 都是在html标签上面写的
接下来我们举个案例(分别是v-if和v-show的代码案例)
代码(v-if):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.item{
width: 200px;
height: 200px;
background-color: red;
}
</style>
</head>
<body>
<div id="app">
<div class="item" v-if="flag"></div>
<button @click="a">按钮</button>
</div>
<script src="vue.js"></script>
<script>
// 有一个必须要写的
// el叫做挂载点, 你要将Vue这个框架 在哪里使用
// 推荐大家都用id id是唯一的
new Vue({
el: "#app",
data: {
message: 'hello vue',
flag: true
},
methods: {
a(){
// 将flag的值变为false
// this.flag = false;
// 如何点击隐藏 再点就出现
// if(this.flag == true){
// this.flag = false;
// }else{
// this.flag = true;
// }
// !是取反的意思 永远只有两个值 真和假 直接一行代码实现
this.flag = !this.flag;
}
}
});
</script>
</body>
</html>
结果:
第一次点击按钮

第二次点击按钮

第三次点击按钮

代码(v-show):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.item{
width: 200px;
height: 200px;
background-color: red;
}
</style>
</head>
<body>
<div id="app">
<div class="item" v-if="show"></div>
<button @click="a">按钮</button>
</div>
<script src="vue.js"></script>
<script>
// 有一个必须要写的
// el叫做挂载点, 你要将Vue这个框架 在哪里使用
// 推荐大家都用id id是唯一的
new Vue({
el: "#app",
data: {
message: 'hello vue',
flag: true
},
methods: {
a(){
// 将flag的值变为false
// this.flag = false;
// 如何点击隐藏 再点就出现
// if(this.flag == true){
// this.flag = false;
// }else{
// this.flag = true;
// }
// !是取反的意思 永远只有两个值 真和假 直接一行代码实现
this.flag = !this.flag;
}
}
});
</script>
</body>
</html>
结果:
第一次点击按钮

第二次点击按钮

第三次点击按钮

我们不难发现, 用v-if和v-show在html标签里面, 效果都是一样的。
但是他们本质上有区别:
当v-if值为false时 直接删除元素
当v-show值为false时 隐藏该元素并且不占位置, 但是元素没有被删除
v-show的原理 通过css属性将元素隐藏, 相当于用了display: none;这种方法。
如果以后要做开发, 用v-if还是v-show, 根据自己的喜好来选择, 其实它们都差不多的。
我们来看一个综合案例:
设置一个按钮, 每次点击它的时候, 将数据源里面的value对象的值加10, 并渲染到页面上面, 当value值为30的时候, 我们就让value的值隐藏。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- 设计一个按钮 -->
<!-- 在数据源定义一个数据value, 并将value渲染到界面 -->
<!-- 并给按钮一个事件, 每次点击按钮都让value的值+10 -->
<!-- 当value的值等于30时, 我们就让value的值隐藏 -->
<div id="app">
<p v-if="flag">{{value}}</p>
<button @click="a">按钮</button>
</div>
<script src="vue.js"></script>
<script>
// 有一个必须要写的
// el叫做挂载点, 你要将Vue这个框架 在哪里使用
// 推荐大家都用id id是唯一的
new Vue({
el: "#app",
data: {
value: 0,
flag: true
},
methods:{
a(){
this.value += 10;
if(this.value == 30){
this.flag = false;
}else{
this.flag = true;
}
}
}
});
</script>
</body>
</html>
结果:
一开始进入的界面

当value=20时

我们再点击一次按钮, 让value=30

我们不难发现, value值被隐藏了。
这是这一串代码:
this.value += 10;
if(this.value == 30){
this.flag = false;
}else{
this.flag = true;
}
再点击一次, value=40

我们可以看到value又出来了。
由于字数限制, 请看下一篇Vue