一、Vue 简介
Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
vue是轻量级的,它有很多独立的功能或库,我们会根据我们的项目来选用vue的一些功能。就像我们开发项目时如果只用到vue的声明式渲染,我就只用vue的声明渲染,而我们要用他的组件系统,我们可以引用它的组件系统。
Vue的特点
1.遵循 MVVM 模式
2.编码简洁,体积小,运行效率高,适合 移动/PC 端开发
3.它本身只关注 UI,可以轻松引入 vue 插件或其它第三方库开发项目
4.采用组件化模式,提高代码复用率、且让代码更好维护
5.声明式编码,让编码人员无需直接操作DOM,提高开发效率
6.使用 虚拟DOM和 Diff算法,尽量复用DOM节点
Vue使用
搭建Vue开发环境
直接在html中用script引入
vue.js文件引入,这两个用哪一个都可以
<script src="js/vue.js"></script>
<script src="js/vue.min.js"></script>
创建Vue实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="root">
<!--插值语法-->
<h1>Hello,{{who}}</h1>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#root',
data() {
return{
who:'Vue'
}
}
});
</script>
</body>
</html>
指令语法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<!-- 插值语法 -->
<h1>Hello,{{who}}</h1>
<hr>
<!-- 指令语法 -->
<p><a v-bind:href="url"> 百度</a></p>
<p><a :href="url"> 百度-1</a></p>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#app',
data:{
who:'Vue',
url:'https://www.baidu.com'
}
});
</script>
</body>
</html>
点击会 跳转到百度页面
数据绑定
单向数据绑定,数据只能从 data 流向页面,在页面其中改变who的值时,其他相同数据不变
双向数据绑定,数据不仅能从 data 流向页面,还能从页面流向 data。改变值时,其他相同数据一同改变
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<!-- 插值语法 -->
<h1>Hello,{{who}}</h1>
<hr>
<p>Hello,<input type="text" :value="who">————————单向数据绑定</p>
<p>Hello,<input type="text" v-model:value="who">————————双向数据绑定</p>
<p>Hello,<input type="text" v-model="who">————————双向数据绑定</p>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#root',
data:{
who:'Vue',
}
});
</script>
</body>
</html>
事件处理
点击事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<!--插值语法-->
<h1>Hello,{{who}}</h1>
<!-- 点击事件-->
<button @click="showWho">点击</button>
<button @click="allo(2)">点击:带参数</button>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#app',
data() {
return{
who:'Vue'
}
},
methods:{
showWho(){
alert(this.who);
},
allo(param){
alert(param * 9)
}
}
});
</script>
</body>
</html>
点击左边的,会出现弹窗
点击右边的,
阻止默认事件 .prevent
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<!--插值语法-->
<h1>Hello,{{who}}</h1>
<!-- 阻止默认事件 .prevent -->
<p><a href="https://www.baidu.com" @click.prevent="allo(1)">百度一下</a> </p>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#app',
data() {
return{
who:'Vue'
}
},
methods:{
allo(param){
alert(param * 9)
}
}
});
</script>
</body>
</html>
原本的结果是点击之后会出现上图的弹框,确定之后会进入到百度页面,但是由于我们添加了
阻止默认事件 .prevent 所以在点击确定后不会进行跳转了
阻止事件冒泡 .stop
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<!--插值语法-->
<h1>Hello,{{who}}</h1>
<!--阻止事件冒泡 .stop 外面有效果的话不去触发-->
<div @click="showDIV" style='border: 1px solid red;width:200px; height:200px'>
<p><a href="https://www.baidu.com" @click="showWho">百度两下</a> </p>
<p><a href="https://www.baidu.com" @click.prevent="showWho">百度三下</a> </p>
<p><a href="https://www.baidu.com" @click.prevent.stop="allo(3)">百度四下</a> </p>
</div>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#app',
data() {
return{
who:'Vue'
}
},
methods:{
showWho(){
alert(this.who);
},
allo(param){
alert(param * 9)
},
showDIV(){
alert('div')
}
}
});
</script>
</body>
</html>
输出结果为百度四下的,点击后只会弹出它本身的效果,其他效果不显示
事件只触发一次 .once
此结果,只能点击一次,之后再点击均为效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<!--插值语法-->
<h1>Hello,{{who}}</h1>
<!--事件只触发一次 once-->
<button @click.once="showAAA">点击:只能点一次</button>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#app',
data() {
return{
who:'Vue'
}
},
methods:{
showAAA(){
alert('AAA')
}
}
});
</script>
</body>
</html>
事件的捕获模式 capture
.capture没有时先触发里面的函数,在冒泡阶段触发外面函数
.capture存在时先触发外面函数,在捕获阶段触发里面的函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<!--插值语法-->
<h1>Hello,{{who}}</h1>
<!--使用事件的捕获模式 让事件在捕获阶段就执行(传统方式是先捕获再冒泡,在冒泡阶段执行函数)
.capture没有时先触发里面的函数,在冒泡阶段触发外面函数
.capture存在时先触发外面函数,在捕获阶段触发里面的函数-->
<div class="box1" @click.capture="showMsg(1)" style='border: 1px solid red;width:200px; height:200px'>
div1
<div class="box2" @click="showMsg(2)" style='border: 1px solid #1c1919;width:100px; height:100px'>
div2
</div>
</div>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#app',
data() {
return{
who:'Vue'
}
},
methods:{
showMsg(param){
alert(param)
}
}
});
</script>
</body>
</html>
只有event.target是当前操作的元素时才触发事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<!--插值语法-->
<h1>Hello,{{who}}</h1>
<!-- 只有event.target是当前操作的元素时才触发事件-->
<div class="demo1" @click.self="show($event)" style='border: 1px solid blue;width:200px; height:200px'>
<button @click="show($event)" >点我</button>
</div>
</div>
<script>
<!-- 3.创建Vue实例 -->
const vm = new Vue({
el:'#app',
data() {
return{
who:'Vue'
}
},
methods:{
show(e){
alert(e.target)
}
}
});
</script>
</body>
</html>
点击“点我”按钮时
点击其他空白时
键盘事件
在输入框中输入内容后只有在键盘上按下特定的键才能弹出框来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<h1>hello, {{who}}</h1>
<p><input type="text" @keydown.enter="show1($event)"></p>
<p><input type="text" @keydown.13="show1($event)"></p>
<p><input type="text" @keydown.huiche="show1($event)"></p>
<p><input type="text" @keydown.ctrl="show1($event)"></p>
</div>
<script>
Vue.config.keyCodes.huiche = 13 // 自定义一个回车键的keyCode别名按键
//3.创建Vue实例
const vm = new Vue({
el:'#app',
data:{
who:'Vue',
},
methods:{
show1(e){
alert(e.target.value)
}
}
});
</script>
</body>
</html>
exact 修饰符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<h1>hello, {{who}}</h1>
<!-- 即使alt或shift被一同按下,也会触发 -->
<button @click.ctrl="msg('A')">A</button>
<!-- 有且只有ctrl 被按下,才会触发 -->
<button @click.ctrl.exact="msg('B')">B</button>
<button @click.alt.exact="msg('C')">C</button>
<button @click.shift.exact="msg('D')">D</button>
<!-- 非系统按键被按下,才会触发 -->
<button @click.exact="msg('E')">E</button>
</div>
<script>
//3.创建Vue实例
const vm = new Vue({
el:'#app',
data:{
who:'Vue',
},
methods:{
msg(param){
alert(param)
}
}
});
</script>
</body>
</html>
鼠标按钮修饰符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue初体验</title>
<!-- 1.引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="app">
<h1>hello, {{who}}</h1>
<button v-on:click="showClick">点我1(不传参)</button>
<button @click.right="showClick">右键点我1(不传参)</button>
<button @click="showClick($event,66)">点我2(传参)</button>
<button @dblclick="showClick">双击点我3(不传参)</button>
</div>
<script>
//3.创建Vue实例
const vm = new Vue({
el:'#app',
data:{
who:'Vue',
},
methods:{
showClick(event,param){
alert(param)
}
}
});
</script>
</body>
</html>