目录
Vue
1、VUE概述
Vue (读音/vju/, 类似于view)是一套用于构建用户界面的渐进式框架,发布于2014年2月。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库(如: vue-router: 跳转,vue-resource: 通信,vuex:管理)或既有项目整合
1.2、前端三要素
-
HTML (结构) :超文本标记语言(Hyper Text Markup Language) ,决定网页的结构和内容
-
CSS (表现) :层叠样式表(Cascading Style sheets) ,设定网页的表现样式
-
JavaScript (行为) :是一种弱类型脚本语言,其源代码不需经过编译,而是由浏览器解释运行,用于控制网页的行为
1.3、JavaScript框架
-
jQuery: 大家熟知的JavaScript框架,优点是简化了DOM操作,缺点是DOM操作太频繁,影响前端性能;在前端眼里使用它仅仅是为了兼容IE6、7、8;
-
Angular: Google收购的前端框架,由一群Java程序员开发,其特点是将后台的MVC模式搬到了前端并增加了模块化开发的理念,与微软合作,采用TypeScript语法开发;对后台程序员友好,对前端程序员不太友好;最大的缺点是版本迭代不合理(如: 1代-> 2代,除了名字,基本就是两个东西;截止发表博客时已推出了Angular6)
-
React: Facebook出品,一款高性能的JS前端框架;特点是提出了新概念[虚拟DOM]用于减少真实DOM操作,在内存中模拟DOM操作,有效的提升了前端渲染效率;缺点是使用复杂,因为需要额外学习一门[JSX] 语言;
-
Vue:一款渐进式JavaScript框架,所谓渐进式就是逐步实现新特性的意思,如实现模块化开发、路由、状态管理等新特性。其特点是综合了Angular (模块化)和React (虚拟DOM)的优点;
-
Axios :前端通信框架;因为Vue 的边界很明确,就是为了处理DOM,所以并不具备通信能力,此时就需要额外使用一个通信框架与服务器交互;当然也可以直接选择使用jQuery提供的AJAX通信功能;
前端三大框架:Angular、React、Vue
2、MVVM
2.1、1. 什么是MVVM
MVVM (Model-View-ViewModel) 是一种软件架构设计模式,由微软WPF (用于替代WinForm,以前就是用这个技术开发桌面应用程序的)和Silverlight (类似于Java Applet,简单点说就是在浏览器上运行的WPF)的架构师Ken Cooper和Ted Peters 开发,是一种简化用户界面的事件驱动编程方式。由John Gossman (同样也是WPF和Silverlight的架构师)于2005年在他的博客上发表。
MVVM 源自于经典的MVC (ModI-View-Controller) 模式。MVVM的核心是ViewModel层,负责转换Model中的数据对象来让数据变得更容易管理和使用,其作用如下:
-
该层向上与视图层进行双向数据绑定
-
向下与Model层通过接口请求进行数据交互
2.2、为什么要使用MVVM
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大好处:
-
低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的 View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
-
可复用:你可以把一些视图逻辑放在一个ViewModel里面,让很多View重用这段视图逻辑。
-
独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
-
可测试:界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
2.3、Vue 是 MVVM 模式的实现者
-
Model : 模型层,在这里表示JavaScript对象
-
ViewModel : 连接视图和数据的中间件,Vue.js就是MVVM中的ViewModel层的实现者在MVVM架构中,是不允许数据和视图直接通信的,只能通过ViewModel来通信,而ViewModel就是定义了一个Observer观察者
-
ViewModel 能够观察到数据的变化,并对视图对应的内容进行更新
-
ViewModel 能够监听到视图的变化,并能够通知数据发生改变
Vue.js 就是一个MVVM的实现者,他的核心就是实现了DOM监听与数据绑定
3、Vue基本用法
Vue在线cdn:
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
el:挂载点
-
el是用来设置Vue实例(管理)的元素
-
Vue会管理el选项命中的元素及其内部的后代元素
-
可以使用其他二点选择器,但是建议使用ID选择器
-
可以使用其他的双标签,不能使用html和body
data:数据对象
-
Vue中用到的数据定义在data中
-
data可以写复杂类型的数据(数组[] 对象{})
-
渲染复杂类型数据时,遵守js的语法即可
现在数据和DOM已经被建立了关联,所有的东西都是响应式的。我们在控制台操作对象的属性,界面可以实时更新。
第一个Vue程序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <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"> { {message}} </div> <script> var vm = new Vue({ el:"#app", data:{ message:"hello,vue" } }); </script> </body> </html>
Vue指令指的是,以v-开头的一组特殊语法
3.1、使用v-text
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <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"> <h2 v-text="message+'!'">西安</h2> <h2 v-text="info+'!'">西安</h2> <h2>{ {message+'!'}}西安</h2> </div> <script> var vm = new Vue({ el:"#app", data:{ message:"hello,vue", info:"helloworld" } }); </script> </body> </html>
-
v-text指令的作用是:设置标签的内容(textContent)
-
默认写法会替换全部内容,使用插值表达式{ {}}可以替换指定内容
-
内部支持写表达式
3.2、使用v-html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <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"> <h2 v-text="message"></h2> <h2 v-html="message"></h2> </div> <script> var vm = new Vue({ el:"#app", data:{ message:"<a href='https://www.baidu.com/'>百度一下<a/>", } }); </script> </body> </html>
-
v-html指令的作用是:设置元素的innerHTML
-
内容中有html结构的会被解析为标签
-
v-text指令无论内容是什么,只会解析为文本
-
解析文本使用v-text,需要解析html结构使用v-html
3.3、使用v-on
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <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"> <input type="button" value="v-on指令" v-on:click="eat"> <input type="button" value="v-on简写" @click="eat"> <h2 @click="noEatCoriander">{ {message}}</h2> </div> <script> var vm = new Vue({ el:"#app", data:{ message:"不吃香菜", }, methods:{ eat:function(){ alert("吃火锅"); }, noEatCoriander:function(){ //控制台输出 console.log(this.message); this.message+="不吃香菜"; } } }); </script> </body> </html>
-
v-on指令的作用是:为元素绑定事件
-
时间名不需要写on
-
指令可以简写为@
-
绑定的方法定义在methods属性中
-
方法的内部通过this关键字可以访问定义在data中的数据
v-on补充
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>v-bind</title> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> </head> <body> <div id="app"> <!-- 引号外单内双,外双内单 --> <button @click="doIt('点赞','关注')">点击</button> <input type="text" @keyup.enter="hello"> </div> <script> var vm = new Vue({ el:"#app", methods:{ doIt:function(a,b){ console.log("hello"); console.log(a); console.log(b); }, hello:function(){ alert("hello Vue"); } } }); </script> </body> </html>
-
事件绑定的方法写成函数调用的形式,可以传入自定义参数
-
定义方法时需要定义形参来接收传入的实参
-
事件的后面跟上.修饰符 可以对事件进行限制
-
.enter 可以限制触发的按键为回车键
-
事件修饰符有多种
小案例计数器实现
<!DOCTYPE html>