一、Vue JS
1、VUE介绍
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
2、VUE组件说明
3、Vue优点
- 渐进式:构建项目可以由简单到复杂
- 体积小 压缩后的文件只有33k
- 运行效率更高,采用虚拟机DOM,一种可以预先通过javaScript对数据进行计算.把最终的DOM操作计算出来并且优化的技术。 由于这个DOM操作属于预处理操作,并没有真实的操作DOM ,所以叫做虚拟DOM
- 双向数据绑定,让开发者不再去操作DOM,将更多的经历投入到业务中。
- 生态丰富,市面上有大量的开源项目基于vue 进行开发,成熟稳定.
4、VUE基本语法
4.1、入门案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>VUE入门案例</title>
</head>
<body>
<!--
入门案例步骤:
1.导入vue.js文件 html下部编辑
2.指定区域进行渲染 需要准备div vue.js代码
3.创建VUE.js对象 指定渲染区域 动态调用
-->
<!-- 2.指定区域 -->
<div id="app">
<!-- 在div中展现msg属性
插值表达式: {{key}}
-->
<h1>{{msg}}</h1>
</div>
<!-- 1.导入JS文件 -->
<script src="../js/vue.js"></script>
<!-- 3.创建VUE对象 -->
<script>
/**
* 语法:
* 1.const 定义常量的
* 2.let: 作用和var类似, 有作用域的概念
* 3.var 特点:没有作用域
*/
const APP = new Vue({
//1.指定区域
el: "#app",
//2.定义属性
data: {
//key:value
msg: "您好VUE"
}
})
</script>
</body>
</html>
5、数据绑定
命令:
v-text:如果页面没有渲染完成,则不显示信息
v-html:直接渲染html标签,,不显示值本身,显示标签结果,解析html的数据
v-pre:跳过预编译,显示标签体本身
v-once:只渲染一次
5.1)v-text 指令
作用:直接展现解析数据
<!-- v-text指令 没有闪动效果 -->
<h3 v-text="text"></h3>
<!-- 引入js -->
<script src="../js/vue.js"></script>
<script type="text/javascript">
const app = new Vue({
//element 元素
el: "#app",
data: {
hello: "helloVue",
text: "数据绑定text"
}
})
</script>
5.2)v-html 指令
说明:内容中有html结构会被解析为标签,解析html的数据
<p v-html="html"></p>
< ! -- 引入js -->
<script src=" ../js/vue.js "></script><script type="text/javascript">
const app = new Vue( {
//element元素
el: "#app",
data: {
hello: "helloVue",
text:"数据绑定text"
html: "<h1>html测试数据</h1>"
}
})
</script>
5.3)v-pre 指令
用法:跳过这个元素和它的子元素的编译过程。可以用来显示原始 Mustache 标签。跳过大量没有指令的节点会加快编译。
<!-- v-pre跳过编译效果,显示原始mustache标签-->
<h3 v-pre>{{hello}}</h3>
5.4)v-once 指令
用法:只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。
<!-- v-once用法元素和组件只渲染一次-->
<h3 v-once>{{once}}</ h3>
5.5)测试
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>VUE数据显示</title>
</head>
<body>
<!-- 2.指定区域 -->
<div id="app">
<!-- 特点:如果页面没有渲染完成,则直接展示给用户
插值表达式需要直接显示
注意事项:只有显示时采用,输入操作不可用
v-text指令:如果页面没有渲染完成,则不显示信息
-->
<h1>{{msg}}</h1>
<!-- v-text指令:如果页面没有渲染完成,则不显示信息-->
<h1 v-text="msg"></h1>
<!-- v-html指令:直接渲染html标签 -->
<h1 v-html="h3Html"></h1>
<!-- v-pre指令:跳过预编译,显示标签原属性 -->
<h1 v-pre>{{msg}}</h1>
<!-- v-prc指令:只渲染一次 -->
<h1 v-once >{{once}}</h1>
</div>
<!-- 1.导入JS文件 -->
<script src="../js/vue.js"></script>
<!-- 3.创建VUE对象 -->
<script>
const APP = new Vue({
//1.指定区域
el: "#app",
//2.定义属性
data: {
//保持原属性
//key:value
//设置msg的值
msg: "您好VUE",
h3Html:"<h3>我需要html渲染</h3>",//html中的标签
once:"我只被渲染一次",
}
})
</script>
</body>
</html>
6、双向数据绑定
6.1)双向数据绑定代码
双向数据绑定:实现了页面与数据的绑定,页面变数据变 / 数据变页面变.。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>双向数据绑定</title>
</head>
<body>
<!-- 2.指定区域 -->
<div id="app">
<!-- 双向数据绑定 v-model
1.数据端---页面
2.页面-----数据
-->
<input name="msg" v-model="msg"/><br>
<h1>{{msg}}</h1>
</div>
<!-- 1.导入JS文件 -->
<script src="../js/vue.js"></script>
<!-- 3.创建VUE对象 -->
<script>
const APP = new Vue({
//1.指定区域
el: "#app",
//2.定义属性
data: {
//保持原属性
//key:value
//设置msg的值
msg: "数据随时修改",
}
})
</script>
</body>
</html>
6.2) MVVM设计思想
知识回顾:
MVC模式 核心思想 **减少代码的耦合性**
M Model:封装的数据
V View 视图层: 数据的展现
C Contro 控制层 程序的流转的过程
衍生:3层代码的结构 Controller—Service–Mapper/Dao
针对于:后端服务器.
MVVM思想说明:
M: Model 封装的数据. 数据层
V: View 数据的展现 视图层
VM: viewModel视图数据的控制层 控制数据流转
MVVM设计思想是前端模拟后端为了解耦的一种设计思想
6.3)双向数据绑定原理
原理步骤:
1.用户修改页面时,通过DOM的监听器感知用户的修改行为,之后通过虚拟DOM对象,第一时间更新Model中的属性.
2.当数据发生变化,由虚拟DOM根据数据绑定的规则,第一事件通知真实的DOM对象,至此页面数据发生变化
7、事件绑定
7.1)v-on指令
语法:
规范:
v-on:click="函数/直接进行计算"
简化写法:
@click="函数/直接进行计算"
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>事件绑定</title>
</head>
<body>
<!-- 2.指定区域 -->
<div id="app">
<!--
需求:实现数据的自增操作
语法: v-on:click="函数/直接计算"
简化写法 v-on: 可以简化为@
-->
<h1 >
<div>
数值:<div v-text="num"></div>
</div>
</h1>
<button v-on:click="num++">自增</button>
<button @click="num--">简化自减</button>
<button @click="addNum()">函数自增</button>
<!-- 方法中没有参数,()可以省略 -->
<button @click="jianNum">函数自减,函数省略括号</button>
</div>
<!-- 1.导入JS文件 -->
<script src="../js/vue.js"></script>
<!-- 3.创建VUE对象 -->
<script>
const APP = new Vue({
//1.指定区域
el: "#app",
//2.定义属性
data: {
num:1
},
methods: {
//key方法名: value方法体
addNum: function(){
this.num++
},
//定义方法简化写法 js脚本支持
jianNum(){
this.num--
},
}
})
</script>
</body>
</html>
事件绑定,传递参数
<button @click=“addNum2($event)”>传递event对象
8、按键触发机制
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>按键触发操作</title>
</head>
<body>
<div id="app">
<!--
语法:
1.v-on:keydown="" 按下触发
2.v-on:keyup="" 弹起来触发
3.v-on:keypress="" 小键盘触发
按键支持:
.enter .tab
.delete (捕获“删除”和“退格”键)
.esc .space
.up .down .left .right
需求:用户通过输入 按特殊的键位触发函数
要求1. 按钮实现加法操作 num = num + num2
要求2. 用户按回车按钮实现触发
要求3. 用户按空格键实现触发
-->
<h3>用户数据:{{num}}</h3><br>
<!-- <input type="text" v-on:keyup.enter="addNum" v-model="num2" /> -->
<input type="text" v-on:keyup.space="addNum" v-model="num2" />
<button @click="addNum">计算</button>
</div>
<script src="../js/vue.js"></script>
<script>
const APP = new Vue({
el: "#app",
data: {
num: 100,
num2: 0
},
methods: {
addNum(){
//this.num = this.num + this.num2
//将字符串转化为数值类型
this.num += parseInt(this.num2)
}
}
})
</script>
</body>
</html>
9、计算器练习
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>计算器案例</title>
</head>
<body>
<div id="app">
<!-- 要求
1.准备两个文本输入框 num1/num2
2.要求准备一个按钮 "计算" 当点击按钮时实现
count=num1+num2
将得到的结果通过 总数输出count
3.当输入num2时可以通过回车按键 计算.
注意事项: input框默认是字符串
-->
数值1: <input type="text" v-model="num1" /><br>
数值2: <input type="text" v-model="num2"
@keyup.enter="addNum"
/><br>
总数: {{count}} <br>
<button @click="addNum">计算</button>
</div>
<script src="../js/vue.js"></script>
<script>
const APP = new Vue({
el: "#app",
data: {
num1: 0,
num2: 0,
count: 0
},
methods: {
addNum(){
this.count =
parseInt(this.num1) + parseInt(this.num2)
}
}
})
</script>
</body>
</html>
10、事件修饰符/按键修饰符
10.1)阻止冒泡 .stop
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>按键修饰符</title>
</head>
<body>
<div id="app">
<!-- 难点: 元素可能需要嵌套,事件可能嵌套
说明: 如果事件嵌套则必然带来事件的冒泡.
解决方案: 阻止事件冒泡 .stop属性
-->
数值: {{num}}
<div @click="num++">
嵌套结构
<button @click.stop="num++">计算</button>
</div>
<script src="../js/vue.js"></script>
<script>
const APP = new Vue({
el: "#app",
data: {
num: 0
},
methods: {
}
})
</script>
</body>
</html>
10.2)阻止默认行为 @click.prevent
<!-- 需求2:
a标签作用中的href的跳转是默认规则
要求: 用户点击a标签 不跳转页面,同时触发事件
解决: 阻止标签的默认行为 @click.prevent
-->
<a href="http://baidu.com" @click.prevent="aClick">百度</a>
<!-- 用途: prevent阻止页面跳转 a标签/form表单 action同步请求 -->