一、Vue简介
1.1 定义
在Java编程语言中,Vue是一个前端JavaScript框架,用于构建用户界面。它被设计成一个渐进式框架,可以用于构建单页面应用(SPA)或多页面应用(MPA)。Vue提供了丰富的工具和库,使开发者能够通过组件化的方式构建可复用的代码,并且能够灵活地管理应用的状态。
总的来说,Vue是一种在Java编程语言中使用的前端JavaScript框架,用于构建可复用、响应式的用户界面。它提供了丰富的工具和库,使开发者能够以组件化的方式构建应用程序,并通过声明式的模板语法和响应式系统来简化开发流程。
1.2 核心思想
Vue的核心思想是将用户界面抽象为一系列的组件,并以组件化的方式构建应用。以下是Vue的核心思想的几个关键点:
- 组件化:Vue将用户界面划分为独立的组件,每个组件具有自己的状态和行为。这种组件化的结构使得应用程序更易于理解、维护和扩展,同时也促进了代码的可复用性。
- 声明式渲染:Vue使用基于HTML的模板语法,使开发者可以以声明式的方式描述组件的结构和行为。通过在模板中绑定数据,Vue能够自动追踪数据的变化并更新相应的视图,使开发者可以专注于描述组件的样式和交互,而不必关注底层的DOM操作。
- 响应式系统:Vue采用了响应式的数据绑定机制,通过建立数据与视图之间的关联,实现了数据的双向绑定。当数据发生变化时,视图会自动更新,反之亦然。这种响应式的特性让应用程序的状态管理更加简洁和高效。
- 虚拟DOM:Vue引入了虚拟DOM的概念,通过在内存中构建虚拟的DOM树,减少了对实际DOM的直接操作。通过对虚拟DOM进行比较,Vue能够高效地计算出最小的DOM变更,并将其应用到实际的DOM上,提高了性能和渲染的效率。
- 组件通信:Vue提供了多种通信方式,使组件之间能够方便地进行数据的传递和交互。包括props和events用于父子组件之间的通信,还有Vuex作为全局状态管理库,以及provide和inject等高级通信方式,满足不同场景下组件之间的需求。
综上所述,Vue的核心思想是以组件化为基础,通过声明式渲染、响应式系统、虚拟DOM和灵活的组件通信方式,使开发者能够以简洁、高效和可维护的方式构建现代化的用户界面应用程序。
1.3 应用领域及用法
Vue广泛应用于前端开发的各个领域,从简单的静态页面到复杂的单页面应用程序(SPA),都可以使用Vue来构建。下面是Vue的一些常见应用领域及用法的示例:
- 网页开发:Vue可以用于构建各种类型的网页,包括静态网页、多页应用(MPA)和单页面应用(SPA)。通过Vue的组件化思想和模板语法,开发者可以更高效地创建交互性、动态且可维护的网页。
- 移动应用开发:Vue可以与配套的移动开发框架(如Vue Native、Weex)结合使用,用于开发跨平台的移动应用。这些框架允许开发者使用Vue的语法和组件模型来构建原生移动应用,同时兼顾开发效率和性能。
- 桌面应用开发:借助Electron等桌面应用开发环境,Vue也可以用于构建桌面应用程序。将Vue与底层的Node.js和Chromium结合,开发者可以使用Web技术构建跨平台的桌面应用程序。
- 后台管理系统:Vue在开发后台管理系统方面非常流行。Vue的组件化和响应式系统使得开发者能够快速搭建复杂的管理界面,并实现数据的展示、交互和状态管理等功能。同时,Vue生态系统中丰富的第三方库和组件库,如Element UI、Ant Design Vue等,为后台管理系统的开发提供了丰富的解决方案。
- 嵌入式应用:Vue可以应用于嵌入式领域,用于构建嵌入式的用户界面。例如,在物联网(IoT)设备、智能家居系统或嵌入式控制面板中,开发者可以使用Vue来开发用户界面,监控设备状态和实现用户交互等功能。
补充说明的是,Vue作为前端框架,主要关注于用户界面的构建和交互,多与后端服务进行数据交互。在实际应用中,Vue通常与其他工具和库(如Vue Router、Vuex、Axios等)结合使用,以满足不同场景的需求。
无论是简单的静态页面还是复杂的应用程序,Vue都提供了灵活的工具和库,支持开发者构建高质量、可维护的前端应用。
二、Vue.js
2.1 简介
Vue.js是一个流行的JavaScript前端框架,用于构建用户界面。它是一个开源项目,由尤雨溪(Evan You)于2014年创建并维护。Vue.js旨在简化Web应用程序开发,通过提供一套灵活的工具和库,帮助开发者构建交互性强、高性能的单页面应用(SPA)和可复用组件。
Vue.js采用了基于组件的开发模式,将应用程序拆分为多个可复用的组件,每个组件负责管理自己的视图、逻辑和状态。这种组件化开发的方式提高了代码的可维护性和可复用性,并且使得团队协作更加高效。
Vue.js具有许多重要特性,包括响应式数据绑定、虚拟DOM、模板语法、计算属性、指令等。它还提供了丰富的生态系统,涵盖了路由管理、状态管理、构建工具等方面的库和插件,使得开发者可以根据项目需求进行选择和扩展。
总的来说,Vue.js是一个简洁、易学、灵活和高性能的前端框架,广泛应用于构建现代化的Web应用程序,无论是个人项目还是大型企业应用都能受益于它的优势。
2.2 核心功能
Vue.js的核心功能主要包括以下几个方面:
- 响应式数据绑定:Vue.js提供了一个响应式的数据绑定系统,可以将数据与视图进行关联。当数据发生变化时,视图会自动更新,反之亦然。这使得开发者可以轻松地管理和更新应用程序的状态,而无需手动操作DOM。
- 组件化开发:Vue.js鼓励使用组件化的方式构建用户界面。一个组件由自己封装的HTML模板、CSS样式和JavaScript逻辑组成,可以实现更高级别的复用性和可维护性。组件可以嵌套和组合,使得界面的构建更加模块化和灵活。
- 模板语法:Vue.js使用基于HTML的模板语法,允许开发者通过插值、指令和表达式将数据绑定到模板中。模板语法使开发者可以以声明式的方式描述视图与数据的关系,提高了代码的可读性和可理解性。
- 虚拟DOM:Vue.js采用了虚拟DOM的概念,通过虚拟DOM的比对算法来高效地更新实际DOM。当数据发生变化时,Vue会生成一个虚拟DOM树,然后与上一次的虚拟DOM树进行比对,找出需要更新的部分,最后只更新这些部分的实际DOM,避免了不必要的DOM操作,提高了性能。
- 路由管理:Vue.js通过Vue Router插件提供了路由管理功能,可以实现前端路由的配置和管理。Vue Router可以帮助开发者构建单页面应用(SPA),实现页面之间的无刷新切换和动态加载组件。
- 状态管理:对于大型应用程序,状态管理是一个重要的方面。Vue.js提供了Vuex插件,用于集中管理应用程序的状态。Vuex提供了一个全局的状态管理器,让不同组件之间可以共享和响应这些状态的变化。
除了以上核心功能,Vue.js还支持许多其他特性和插件,例如过渡动画、自定义指令、过滤器等。总之,Vue.js的核心功能使得前端开发更加简单、高效且可维护,适用于各种类型的Web应用开发。
2.3 特性
Vue.js具有以下一些主要的特性:
- 响应式数据绑定:Vue.js采用了数据劫持和观察的机制,在数据变化时自动更新相关的视图。这样,当应用状态改变时,Vue.js能够智能地更新DOM,保持视图和数据的同步。
- 组件化开发:Vue.js支持组件化开发,通过将一个应用拆分成多个小组件,可以实现更好的代码复用和可维护性。每个组件都有自己的模板、逻辑和样式,组件之间可以通过Props和Events进行通信。
- 渐进式框架:Vue.js是一个渐进式框架,可以根据项目的需求选择逐步采用Vue.js的特性,而不是一次性全部引入。这使得在现有项目中引入Vue.js更加方便,并且可以逐步优化和加强现有功能。
- 虚拟DOM:Vue.js使用虚拟DOM来提高性能。通过将变化前后的DOM树进行比对,Vue.js能够准确地找出需要更新的部分,从而避免了不必要的DOM操作,提高了渲染的效率。
- 模板语法:Vue.js使用基于HTML的模板语法,使得开发者可以更直观地编写模板。模板语法支持插值、指令和表达式等功能,使得数据绑定和逻辑处理变得更加简单和易于理解。
- 独立性:Vue.js为开发者提供了独立性,可以很容易地集成到现有的项目中,而不需要对整个项目进行重构。同时,Vue.js也提供了完整的构建工具和开发环境,方便开发者进行开发、构建和调试。
- 生态系统:Vue.js拥有强大而丰富的生态系统,提供了一系列官方和第三方的扩展库、插件和工具,可以满足各种不同的需求。例如,Vue Router用于路由管理,Vuex用于状态管理,Vue CLI用于项目的构建和开发等。
三、MVVM的介绍
MVVM(Model-View-ViewModel)是一种软件架构模式,用于将应用程序的用户界面(View)与业务逻辑(Model)分离,并引入一个独立的视图模型(ViewModel)来连接两者
3.1 主要组件
MVVM模式的三个主要组件如下:
- Model(模型):表示应用程序的业务数据和业务逻辑。它负责处理数据的获取、存储、验证以及与底层系统的交互,例如数据库、网络请求等。
- View(视图):表示应用程序的用户界面。它负责展示数据、处理用户输入和向用户呈现可视化元素等,通常是由HTML、CSS和用户交互事件组成。
- ViewModel(视图模型):作为View和Model之间的中间层,它连接了视图和模型,负责处理视图的交互逻辑和数据绑定。ViewModel将业务数据从Model中获取,并将其转换为视图所需的格式,然后通过数据绑定机制将数据传递给View。ViewModel还能够监听View的用户交互事件,并将其处理转发给Model,从而实现与模型的交互。
3.2 特点和优势
MVVM模式的特点和优势包括:
- 解耦和可维护性:MVVM模式将视图和业务逻辑分离,使得它们能够独立开发和测试。这种解耦性提高了代码的可维护性,减少了代码间的依赖。
- 双向数据绑定:MVVM模式利用数据绑定机制实现了视图和视图模型之间的双向数据同步。当数据发生变化时,视图会自动更新,而用户的交互操作也会反映在视图模型和数据模型中。
- 可复用的视图和视图模型:由于视图和视图模型的分离,可以更方便地复用它们。同一个视图模型可以被不同的视图使用,而一个视图模板也可以绑定到不同的视图模型上。
- 提高开发效率:通过数据绑定和命令绑定等机制,MVVM模式降低了开发者编写大量手动DOM操作和事件处理的工作,提高了开发效率。
MVVM模式被广泛应用于各种前端框架和库中,例如Vue.js、Angular和Knockout等。它能够提供清晰的架构和良好的可维护性,使得开发和维护复杂的应用程序变得更加简单和可靠。
四、Vue入门
4.1 HelloWorld实现
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Vue入门</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script> </head> <body> <!-- 2.定义Vue所管理的边界,有且只有一个根节点 --> <div id="app"> {{msg}} </div> <script type="text/javascript""> new Vue({ el:"#app", data(){ return {msg:'刘三金每日早上日常臭美,哎哟我他n真帅!'} } }) </script> </body> </html>
结果如下:
4.2 数据弹屏发送
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Vue入门</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script> </head> <body> <!-- 2.定义Vue所管理的边界,有且只有一个根节点 --> <div id="app"> {{msg}} <span id="show"> </span> <input id="content"/> <button type="button" onclick="tan()">发送弹屏</button> </div> <script type="text/javascript""> new Vue({ el:"#app", data(){ return {msg:'刘三金每日早上日常臭美,哎哟我他n真帅!'} } }) function tan(){ var content = $("#content").val(); $("#show").text(content); } </script> </body> </html>
效果如下:
4.3 v-model的使用(双向绑定)
在Vue中,v-model是一个指令,用于实现双向绑定。
v-model常用于表单元素(如input、select、textarea)中,将表单元素的值与Vue实例中的数据进行双向绑定,这样当表单元素的值改变时,Vue实例中的数据也会随之改变,反之亦然。
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Vue入门</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script> </head> <body> <!-- 2.定义Vue所管理的边界,有且只有一个根节点 --> <div id="app"> {{msg}} <input v-model="msg"/> <!-- <button type="button" onclick="tan()">发送弹屏</button> --> </div> <script type="text/javascript""> new Vue({ el:"#app", data(){ return {msg:'刘三金每日早上日常臭美,哎哟我他n真帅!'} } }) </script> </body> </html>
结果展示如下:
需要注意的是,v-model只能在支持value属性的表单元素中使用。对于自定义组件,如果想要实现类似的双向绑定,需要手动实现一个value属性,并在组件中使用该属性来监听变化。
4.4 弹窗数据绑定
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Vue入门</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script> </head> <body> <!-- 2.定义Vue所管理的边界,有且只有一个根节点 --> <div id="app"> <!-- {{msg}} --> <input v-model="msg"/> <button type="button" @click="tan()">发送弹屏</button> </div> <script type="text/javascript""> new Vue({ el:"#app", data(){ return {msg:null} }, methods:{ tan(){ alert(this.msg) } } }) </script> </body> </html>
结果展示如下:
4.5 :value的使用(单向绑定)
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Vue入门</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script> </head> <body> <!-- 2.定义Vue所管理的边界,有且只有一个根节点 --> <div id="app"> <!-- {{msg}} --> <input :value="msg"/> <button type="button" @click="tan()">发送弹屏</button> </div> <script type="text/javascript""> new Vue({ el:"#app", data(){ return {msg:3} }, methods:{ tan(){ alert(this.msg) } } }) </script> </body> </html>
结果如下:
五、Vue的生命周期
Vue组件的生命周期分为以下八个阶段:
1. beforeCreate:在实例被创建之初,数据观测和初始化事件还未开始。
2. created:实例创建完成,已经完成了数据观测和初始化事件。
3. beforeMount:在挂载开始之前被调用,即将开始编译模板并将其挂载到页面上。
4. mounted:挂载完成后调用,此时组件已经显示在页面上。
5. beforeUpdate:在数据更新之前调用,可以在此时对数据进行操作。
6. updated:数据更新完成后调用,组件已经重新渲染完成。
7. beforeDestroy:在实例销毁之前调用,此时实例仍然可以被操作。
8. destroyed:实例销毁后调用,此时所有的指令和事件监听器都已经被移除,组件已经从页面中删除。
需要注意的是,在组件中,生命周期钩子函数可以作为方法进行定义,也可以作为属性进行定义。定义为方法时需要在方法内部执行相应的任务,定义为属性时需要直接定义相应的任务函数。
图解如下:
Vue生命周期具体详解如下(附代码):
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script> </head> <body> <div id="d1"> <div>number:{{number}}</div> <div>{{detail()}}</div> <input type="text" v-model="number" /> </div> <script> var data = { number:999, msg:null }; var vm = new Vue({ el:'#d1', data:data, methods:{ detail:function(){ return "使用方法来插值:"+this.msg; } }, beforeCreate:function(){ console.log('beforeCreate:刚刚new Vue()之后,这个时候,数据还没有挂载呢,只是一个空壳') console.log(this.msg)//undefined console.log(document.getElementsByClassName("myp")[0])//undefined }, created:function(){ console.log('created:这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数') this.msg+='!!!' console.log('在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取') console.log('接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染') }, beforeMount:function(){ console.log('beforeMount:虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated') this.msg+='@@@' console.log('在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取') console.log(document.getElementsByClassName("myp")[0])//undefined console.log('接下来开始render,渲染出真实dom') }, // render:function(createElement){ // console.log('render') // return createElement('div','hahaha') // }, mounted:function(){ console.log('mounted:此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了') console.log(document.getElementsByClassName("myp")[0]) console.log('可以在这里操作真实dom等事情...') // this.$options.timer = setInterval(function () { // console.log('setInterval') // this.msg+='!' // }.bind(this),500) }, beforeUpdate:function(){ //这里不能更改数据,否则会陷入死循环 console.log('beforeUpdate:重新渲染之前触发') console.log('然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染') }, updated:function(){ //这里不能更改数据,否则会陷入死循环 console.log('updated:数据已经更改完成,dom也重新render完成') }, beforeDestroy:function(){ console.log('beforeDestory:销毁前执行($destroy方法被调用的时候就会执行),一般在这里善后:清除计时器、清除非指令绑定的事件等等...') // clearInterval(this.$options.timer) }, destroyed:function(){ console.log('destroyed:组件的数据绑定、监听...都去掉了,只剩下dom空壳,这里也可以善后') } }); </script> </body> </html>
最后Vue入门就到这里,祝大家在敲代码的路上一路通畅!