Vue系列(一)之 Vue入门

news2024/9/25 9:32:53

一. Vue简介

1.1 概述

 Vue是一个构建用户界面(UI)的[渐进式]JavaScript框架。

2.2 特点

1.声明式编码,遵循MVVM原则

2.编码简单,体积小

3.组件化,复用率高,代码维护容易

2.3 MVVM介绍

MVVM,一种更好的UI模式解决方案,这个模式的核心是ViewModel,它是一种特殊的model类型,用于表示程序的UI状态。它包含描述每个UI控件的状态的属性。例如,文本输入域的当前文本,或者一个特定按钮是否可用。它同样暴露了视图可以执行哪些行为,如按钮点击或手势。

MVVM ===> M / V / VM

   M:model数据模型

   V:view视图

   VM:ViewModel 视图模型    虚拟dom

我们可以将ViewModel看作是视图的模型(model-of-the-view),ViewModel层通过双向数据绑定将View层和Model层连接了起来。MVVM模式中的三部分比MVC更加简洁,下面是一些严格的限制

  1. View引用了ViewModel,但反过来不行。
  2. ViewModel引用了Model,但反过来不行。

如果我们破坏了这些规则,便无法正确地使用MVVM。

这个模式有以下一些立竿见影的优势:

  1. 轻量的视图:所有的UI逻辑都在ViewModel中。
  2. 便于测试:我们可以在没有视图的情况下运行整个程序,这样大大地增加了它的可测试性

 注1:虽然没有完全遵循MVVM模型,Vue的设计无疑受到了它的启发。因此在文档中经常会使用 vm (ViewModel 的简称) 这个变量名表示 Vue 实例,另外一个js框架“knockout”完全遵循MVVM模型

 注2:学习Vue要转化思想:“不要在想着怎么操作DOM,而是想着如何操作数据!!!”

2.4 库和框架的区别

1. 库(Library),本质上是一些函数的集合。每次调用函数,实现一个特定的功能,接着把控制权交给使用者

      代表:jQuery

      jQuery这个库的核心:DOM操作,即:封装DOM操作,简化DOM操作

2. 框架(Framework),是一套完整的解决方案,使用框架的时候,需要把你的代码放到框架合适的地方,框架会在合适的时机调用你的代码

      代表:vue

      框架规定了自己的编程方式,是一套完整的解决方案

      使用框架的时候,由框架控制一切,我们只需要按照规则写代码

      框架的侵入性很高(从头到尾)

二. Vue入门

2.1 Vue起步

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title></title>
	</head>
	<body>
		<!-- 定义vue所管理的边界,有且只有一个根节点 -->
		<div id="app">
			{{msg}}
		</div>
		
		<script type="text/javascript">
			// 构建vue实例并绑定边界
			new Vue({
				// el:提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标
				el:"#app",
				// Vue 实例的数据对象,用于给 View 提供数据
				data(){
					return{msg:"hello vue!!!"}
				}
			})
		</script>
	</body>
</html>

效果:

 

2.2 v-model:数据双向绑定实例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<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>
		<title></title>
	</head>
	<body>
		<!-- 定义vue所管理的边界,有且只有一个根节点 -->
		<div id="app">
			{{msg}}
			<br>
			<input v-model="msg" />
		</div>
		
		<script type="text/javascript">
			// 构建vue实例并绑定边界
			new Vue({
				// el:提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标
				el:"#app",
				// Vue 实例的数据对象,用于给 View 提供数据
				data(){
					return{msg:"hello vue!!!"}
				}
			})
		</script>
	</body>
</html>

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<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>
		<title></title>
	</head>
	<body>
		<!-- 定义vue所管理的边界,有且只有一个根节点 -->
		<div id="app">
			{{msg}}
			<br>
			<input v-model="msg" />
			<button type="button" @click="tan()">发送弹屏</button>
		</div>
		
		<script type="text/javascript">
			// 构建vue实例并绑定边界
			new Vue({
				// el:提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标
				el:"#app",
				// Vue 实例的数据对象,用于给 View 提供数据
				data(){
					return{msg:"hello vue!!!"}
				},
				methods:{
					tan(){
						alert(this.msg);
					}
				}
			})
		</script>
	</body>
</html>

 

三. Vue的生命周期

Vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数可以实现组件数据管理和DOM渲染两大重要功能。

vue生命周期可以分为八个阶段,分别是:

beforeCreate(创建前)、created(创建后)、beforeMount(载入前)、mounted(载入后)、beforeUpdate(更新前)、updated(更新后)、beforeDestroy(销毁前)、destroyed(销毁后)

<!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初始化默认触发的钩子函数有:beforeCreate(创建前)、created(创建后)、beforeMount(载入前)、mounted(载入后)

四. 前后端分离

在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线。将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端。 由于前后端分离这个概念相对来说刚出现不久,很多人都是只闻其声,不见其形,所以可能会对它产生一些误解,误以为前后端分离只是一种web应用开发模式,只要在web应用的开发期进行了前后端开发工作的分工就是前后端分离。 其实前后端分离并不只是开发模式,而是web应用的一种架构模式。在开发阶段,前后端工程师约定好数据交互接口,实现并进行开发和测试;在运行阶段前后端分离模式需要对web应用进行分离部署,前后端之前使用HTTP或者其他协议进行交互请求。 前后端分离原则,简单来讲就是前端和后端的代码分离也就是技术上做分离。推荐的模式是最好直接采用物理分离的方式部署,进一步促使进行更彻底的分离。不要继续以前的服务端模板技术,比如JSP ,把Java JS HTML CSS 都堆到一个页面里,稍复杂的页面就无法维护。

好处:

这种分离模式的方式有几个好处:

前后端技术分离,可以由各自的专家来对各自的领域进行优化,这样前端的用户体验优化效果会更好。分离模式下,前后端交互界面更加清晰,就剩下了接口和模型,后端的接口简洁明了,更容易维护。前端多渠道集成场景更容易实现,后端服务无需变更,采用统一的数据和模型,可以支撑前端的web UI ,移动App等访问。

前后端分离意味着,前后端之间使用 JSON 来交流,两个开发团队之间使用 API 作为契约进行交互。从此,后台选用的技术栈不影响前台。 前后端分离并非仅仅只是前后端开发的分工,而是在开发期进行代码存放分离、前后端开发职责分离,前后端能够独立进行开发测试;在运行期进行应用部署分离,前后端之间通过HTTP请求进行通讯。前后端分离的开发模式与传统模式相比,能为我们提升开发效率、增强代码可维护性,让我们有规划地打造一个前后端并重的精益开发团队,更好地应对越来越复杂多变的Web应用开发需求。 前后端分离的核心:后台提供数据,前端负责显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019373.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 或者 Docker 容器通过 date 设置系统时间

目录 1. Linux2. Docker 容器2.1 进入容器内部修改2.2 可能会遇到的问题 1. Linux 要在Linux系统中设置日期和时间&#xff0c;可以使用date命令。 使用以下命令格式来设置日期和时间&#xff1a; sudo date -s "YYYY-MM-DD HH:MM:SS"其中&#xff0c;YYYY表示年份…

Postman应用——Collection、Folder和Request

文章目录 Collection新建CollectionCollection重命名保存Request到Collection在Collection下创建Request删除Collection Folder新建FolderFolder重命名保存Request到Folder在Folder下创建Request在Folder下创建Folder删除Folder Request创建临时RequestRequest重命名删除Reques…

东芝电视Z750的音画效果好吗?调校的够真实吗?

精准匹配声音与画面,呈现“音画合一”的影院级视听盛宴,东芝电视Z750真的很不错,东芝电视拥有70余年的原色调校技术,色彩看起来细腻且舒服,饱和度和景深等都处理的很恰当,而且还有火箭炮音响系统,也是经过日本专业调校的,针对不同家居场景,都有不同的声音处理方案,让我们听到的…

基因组大小查询(二)|基因组组装结果查询

基因组大小&#xff08;size of genome&#xff09;是指单倍体细胞核中的所含的DNA的总量。在进行基因组测序之前&#xff0c;生物学家是用质量来衡量不同生物之间基因组的大小。对于已经测序发表的基因组&#xff0c;可以直接通过查询相关数据库中提交的基因组信息&#xff0c…

最新USB3.2接口,速度每秒传输2GB

你还用U盘吗&#xff1f;根据最新的USB结构规范来看&#xff0c;你的U盘或许该换新了。USB Promoter Group近日宣布USB 3.2规格将让现有的USB Type-C数据线传输速度提升一倍&#xff1a;作为USB3.1的升级版&#xff0c;它最主要的改变就是将理论传输速率从1GB/s提升到2GB/s。 根…

气传导耳机对耳朵有伤害吗?气传导耳机哪款好?

​随着气传导耳机的快速发展&#xff0c;在运动、办公等场合能够经常看到&#xff0c;带来了前所未有的舒适体验。作为一种新型耳机类型&#xff0c;相较传统入耳式耳机来说&#xff0c;更有利于耳道卫生&#xff0c;在听歌时还能保持对环境声的感知。面对市面上这么多气传导耳…

html排版标签

1.标题标签h1-h6align 2.水平线<hr> 和换行<br/>3.html实体标签 半角空格&emsp; 全角空格< >> <其他的html实体 4.div和span标签5.段落标签<p> html常用标签分类&#xff1a;排版标签、图片标签、超链接标签、表格标签、列表标签、表单标签 …

坐标休斯顿,TDengine 受邀参与第九届石油天然气数字化大会

美国中部时间 9 月 14 日至 15 日&#xff0c;第九届石油天然气数字化大会在美国德克萨斯州-休斯顿-希尔顿美洲酒店举办。本次大会汇聚了数百名全球石油天然气技术高管及众多极具创新性的数据技术方案商&#xff0c;组织了上百场硬核演讲&#xff0c;技术专家与行业从业者共聚一…

【PyTorch 攻略 (4/7)】张量和梯度函数

一、说明 W在训练神经网络时&#xff0c;最常用的算法是反向传播。在该算法中&#xff0c;参数&#xff08;模型权重&#xff09;根据损失函数相对于给定参数的梯度进行调整。损失函数计算神经网络产生的预期输出和实际输出之间的差异。 目标是获得尽可能接近零的损失函…

一款 Linux 邮件客户端—Nylas Mail

导读Linux 上面有许多邮件客户端&#xff0c;Geary、Empathy、Evolution 和 Thunderbird 本身已经为很多用户提供了很好的服务&#xff0c;但是我发现了值得一试的软件&#xff1a; Nylas Mail。 为什么使用 Nylas&#xff1f; ​很多人因为种种原因选择了 Nylas Mail。让我们…

雷池社区WAF:保护您的网站免受黑客攻击 | 开源日报 0918

keras-team/keras Stars: 59.2k License: Apache-2.0 Keras 是一个用 Python 编写的深度学习 API&#xff0c;运行在机器学习平台 TensorFlow 之上。它 简单易用&#xff1a;减少了开发者认知负荷&#xff0c;使其能够更关注问题中真正重要的部分。灵活性强&#xff1a;通过逐…

Learn Prompt-ChatGPT 精选案例:代码助理

你可以使用 ChatGPT 进行代码生成、生成测试用例、注释、审查和漏洞检测。 代码生成​ 我们可以让 ChatGPT 自动生成一个排序算法中的快速排序的Python代码。 简单的代码生成对于 ChatGPT 来说小事一桩。 测试用例​ 用例来源出自StuGRua 在待测函数函数定义清晰的情况下…

什么是气传导耳机?气传导耳机值得入手吗?

​随着生活节奏的加快&#xff0c;人们越来越关注听力健康。气传导耳机以其独特的传导方式和舒适的佩戴感受&#xff0c;逐渐成为耳机市场的新宠。气传导耳机不入耳设计听音&#xff0c;让你在享受音乐的同时&#xff0c;也能保护你的听力安全。今天我们就一起来看看几款值得大…

无涯教程-JavaScript - COMBINA函数

描述 COMBINA函数返回给定数量的项目的组合数量(重复)。 语法 COMBINA (number, number_chosen)争论 Argument描述Required/OptionalNumber 必须大于或等于0,并且大于或等于Number_chosen。 非整数值将被截断。 RequiredNumber_chosen 必须大于或等于0。 非整数值将被截断。…

国际上被广泛认可的电子邮箱服务有哪些?

随着全球化的发展&#xff0c;越来越多的企业开始涉足国际贸易。在众多的邮箱服务提供商中&#xff0c;哪些是国际上比较认可的呢&#xff1f;本文将为您详细介绍几款在全球范围内广受好评的邮箱服务&#xff1a;Gmail(谷歌邮箱)、Outlook(微软邮箱)、Yahoo Mail(雅虎邮箱)、Zo…

品牌营销|小红书母婴消费的发展趋势,与创新路径在哪里

随着社会的发展与进步&#xff0c;母婴消费已经成为现代家庭生活中的重要组成部分。人们对于孩子的关爱和需求日益增长&#xff0c;母婴市场也变得愈发繁荣。今天来分享下品牌营销&#xff0c;小红书母婴消费的发展趋势&#xff0c;与创新路径在哪里&#xff1f; 一、母婴消费的…

【Redis面试题(46道)】

文章目录 Redis面试题&#xff08;46道&#xff09;基础1.说说什么是Redis?2.Redis可以用来干什么&#xff1f;3.Redis 有哪些数据结构&#xff1f;4.Redis为什么快呢&#xff1f;5.能说一下I/O多路复用吗&#xff1f;6. Redis为什么早期选择单线程&#xff1f;7.Redis6.0使用…

抖音带货怎么找货源合作?

随着社交媒体的快速发展&#xff0c;抖音已成为销售商品的重要平台。越来越多的个人和企业开始在抖音上销售​​商品&#xff0c;但寻找合适的货源进行合作是一个很大的挑战。本文将为您介绍一些寻找合作货源的方法和技巧。 如何寻找抖音合作的货源&#xff1f; 确定你的目标市…

数据库管理-第104期 RAC上升级SSH的坑(20230918)

数据库管理-第104期 RAC上升级SSH的坑&#xff08;20230918&#xff09; 最近一些版本的OpenSSH和OpenSSL都爆出了比较严重的漏洞&#xff0c;但是Oracle数据库尤其是RAC升级SSH和SSL其实是有一定风险的&#xff0c;这里就借助我的OCM环境&#xff0c;做一次SSH升级的演示及排…

用ModelScope给大家送上中秋祝福

用ModelScope来阐述中秋的意义 第一 中秋节的背景 接下来我们继续深入一下看看ModelScope的理解 可以看当我们讨论家庭团聚时&#xff0c;ModelScope 对这个主题的理解的确十分准确。然而&#xff0c;有时候我们在表达这个概念时可能会变得有些过于正式和僵硬&#xff0c;这样…