Vue的学习 —— <初识vue>

目录

前言

目标

前端的发展历程

正篇开始——Vue讲解

一、Vue简介

二、Vue特性

1、数据驱动视图

2、双向数据绑定

3、指令

4、插件

三、vue的三大版本


前言

在这个快速迭代的互联网时代,前端技术的发展日新月异,Vue.js的出现无疑为前端开发领域注入了新的活力。对于初学者而言,Vue.js的魅力在于它能够以最少的学习成本,实现丰富的功能与优雅的代码结构。本篇文章,《初识Vue》,正是为了引领每一位前端探索者,踏入Vue.js的奇妙世界,从零开始,逐步揭开它的神秘面纱。

目标

  • 了解前端技术的发展,能够说出使用框架开发项目的优势

  • 了解什么是Vue,能够说出Vue的基本概念

  • 了解Vue的特性,能够说出Vue的4个特性

  • 了解Vue的版本,能够说出Vue 2和Vue3的区别

前端的发展历程

在前端开发的领域中,HTML、CSS和JavaScript扮演着基石的角色。HTML,作为内容的骨架,为页面构建了稳固的结构,CSS则为这副骨架赋予了华丽的衣裳,使得页面在视觉上更具吸引力,而JavaScript则赋予了页面生命,处理用户与页面间的交互行为。

  • HTML —— 骨架
  • CSS   —— 衣服
  • JS —— 用户页面交互

当项目规模逐渐扩大,涉及的交互愈加复杂时,开发者往往需要处理大量的JavaScript代码,以操作文档对象模型(DOM)并应对浏览器的兼容性问题。为了简化这一过程,jQuery应运而生。它不仅提供了一个高效的查询选择器引擎,能够快速定位DOM元素,还为解决不同浏览器间的JavaScript兼容性问题提供了隐式的解决方案。因此,jQuery受到了广大开发者的热烈欢迎。其核心思想在于让开发者用更少的代码实现更多的功能。

  • 交互增多 —— 大量JS代码 —— jQuery(兼容性问题)

随着移动互联网的兴起,前端技术也延伸到了移动端开发领域。为了更好地满足用户的体验需求,移动端网页通常采用单页Web应用(Single Page Web Application)的形式。与传统的网页不同,单页Web应用仅需加载一个HTML页面,用户在浏览过程中无需因点击而重新加载页面。尽管名字中有“单页”二字,但这并不意味着应用的功能受限。开发者可以利用Ajax等技术实现逻辑上的页面切换效果,为用户带来流畅的使用体验。单页Web应用将所有的功能局限于一个Web页面中,仅在该页面的初始化时加载相应的资源(必要的HTML、CSS和JavaScript代码)。在页面加载完成后,所有的操作都在这个页面上完成,且不会因用户的操作而进行页面的重新加载或跳转,而是利用JavaScript动态地变换页面的内容,从而实现页面与用户的交互。

  • 互联网兴起 —— 移动端 —— Web页面 —— 更好的交互
  • 单页web页面的优点
  1. 良好的交互体验。在单页Web应用中,内容的改变不需要重新加载整个页面,响应速度更快。
  2. 良好的前后端分离开发模式。后端专注于提供API,更容易实现API的复用。
  3. 减轻服务器的压力。单页Web应用中的数据是通过Ajax获取的,不需要重新加载,服务器的压力较小。
  • 单页web页面的问题
  1. 首屏加载慢,在首次加载时需要将页面中所用到的资源全部加载。

  2. 不利于搜索引擎优化(Search Engine Optimization,SEO)。对于单页Web应用,搜索引擎请求到的HTML页面可能不是包含所有数据的最终渲染页面,这样就很不利于内容被搜索引擎搜索到。

随着技术的进步,上述问题已经有了相应的解决方案。对于第1个问题,可以通过路由懒加载、代码压缩、网络传输压缩等方式解决;对于第2个问题,可以通过服务器端渲染(Server-Side Rendering,SSR)技术解决。至于这些解决方案的实施,Vue.js已经默默帮我们解决了。

  • ①首屏加载慢②不利于搜索引擎优化 —— vue.js

为了进一步提高开发效率,许多基于MVVM模式的前端开发框架涌现出来,如Angular、React和Vue等。这些框架将重心放在数据与视图的关系上,使开发者更多地关注业务逻辑的处理,从而减少了手动操作DOM的需要。它们还为开发者提供了一套规范,确保项目按照既定的规则进行。与jQuery相比,使用这些框架的项目在开发效率、可维护性、可扩展性和性能等方面都有着显著的优势。

在Angular、React和Vue这三者中,Vue以其体积小巧、易于上手和高度灵活的特点脱颖而出。

正篇开始——Vue讲解

一、Vue简介

Vue(读音:/Vjuː/)是一款用于构建用户界面的渐进式框架。其中,“渐进式”是指在使用Vue核心库时,可以在核心库的基础上根据实际需要逐步增加功能。

使用Vue进行项目开发具有以下优势:

  • 轻量级。Vue是一个轻量级的前端开发框架,文件体积小。

  • Vue项目基于JavaScript语言开发,开发者不用单独学一门陌生的语言,从而降低了学习的门槛。

  • Vue在使用上比较灵活,开发人员可以选择使用Vue开发一个全新项目,也可以将Vue引入现有项目。

  • Vue通过虚拟DOM技术减少对DOM的直接操作,并通过尽可能简单的API来实现响应的数据绑定,可支持单向和双向数据绑定。

  • Vue支持组件化开发,可提高项目的开发效率和可维护性,使代码更易于复用,便于团队的协同开发。

  • Vue可以与前端开发中用到的一系列工具以及各种支持库结合使用,以实现前端工程化开发,从而提高了项目的开发效率,降低了大型项目的开发难度。

Vue是基于MVVM模式的框架。MVVM主要包含Model(数据模型)、View(视图)和ViewModel(视图模型)。其中,Model是指数据部分,负责业务数据的处理;View是指视图部分,即用户界面,负责视图处理;ViewModel用于连接视图与数据模型,负责监听Model或者View的改变。

View和Model不能直接通信,它们需要借助ViewModel才能进行通信。ViewModel相当于一个观察者,监控着View和Model的动作,实现了View与Model的解耦。ViewModel 包含 DOM Listeners 和 Data Bindings。其中,DOM Listeners 用于监听View中DOM变化,并在DOM变化时通知Model做出相应的修改;Data Bindings用于监听Model中的数据变化,并在数据变化时通知View做出相应的修改。

二、Vue特性

1、数据驱动视图

在使用Vue的页面中,Vue会监听数据变化,当页面数据发生变化时,Vue会自动重新渲染页面结构,如下图所示:

2、双向数据绑定

Vue实现了双向数据绑定,即当数据发生变化时,视图也会发生变化;当视图发生变化时,数据也会跟着同步变化。

例如,用户在填写表单时,双向数据绑定可以辅助开发者在无须手动操作DOM的前提下,自动同步用户填写的内容数据,从而获取表单元素最新的值。

3、指令

指令主要包括内置指令和自定义指令,内置指令是Vue本身自带的指令,而自定义指令是由用户自己定义的指令。

指令的名称以“v-”开头,作用于HTML中的元素。将指令绑定在元素上时,指令会给绑定的元素添加一些特殊的行为。

例如,v-bind指令用于实现单向数据绑定,v-if指令用于实现页面条件渲染,v-for指令用于实现页面列表渲染等。

4、插件

Vue支持插件,通过加载插件可以实现更多的功能。常用的插件有Vue Router(路由)、Vuex(状态管理库)、Pinia(轻量级状态管理库)等,这些插件经过简单配置就可以使用。

三、vue的三大版本

目前,Vue共有3个大版本,分别是Vue 1、Vue 2和Vue 3。其中,Vue 1几乎被淘汰,不建议学习与使用;Vue 2和Vue 3目前被广泛应用,并且Vue 3将会逐步替代Vue 2。

Vue 3支持Vue 2中绝大多数的API与特性,同时Vue 3还新增了一些特有的功能,并废弃了Vue 2中的一些旧功能。Vue 3新增的功能包括组合式(Composition)API、多根节点组件等;废弃的旧功能包括过滤器(Filter)以及$on()、$off()和$once()实例方法等。虽然从表面上看,Vue 3和Vue 2的使用方式没有太大的差异,但Vue 3的底层代码发生了很大变化,包括渲染、数据监听、双向绑定、生命周期等。

Vue 3的新特性如下:

  • 体积更小,采用按需编译的方式编译出来的文件体积比Vue 2的小。

  • 性能提升,运行速度比Vue 2快1.5倍左右。

  • 具有更好的TypeScript支持。

  • 暴露了更底层的API,可以通过多种方式组织代码,代码使用上更加灵活。

  • 提供了更先进的组件。Vue创建了一个虚拟的Fragment节点,允许组件中有多个根节点。

  • 提供组合式API,能够更好地组合逻辑、封装逻辑、复用逻辑。

为了提高开发效率,开发者可以在项目中添加UI组件库。UI组件库可以理解成一个可重复使用的界面设计元素的集合体,使用它可以更快速地开发用户界面。

目前,主流UI组件库都已经发布了支持Vue 3的版本,常用的UI组件库如下:

  • Echarts组件库:一个基于JavaScript的开源可视化图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器。

  • Element Plus组件库:一款基于Vue 3的桌面端组件库。

  • Vant组件库:一款开源移动端组件库,它从3.0版本开始支持Vue 3。

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

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

相关文章

深度解析Nginx:高性能Web服务器的奥秘(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、Nginx概述 二、Nginx核心功能 1、URL重写与重…

git-将本地项目上传到远程仓库

在gitee中新建一个远程仓库。 填写对应内容。 打开你想上传的文件夹,比如我想上传yuanshen 右击,打开git bash 输入git init初始化仓库 git init 添加项目所有文件 git add . 将添加的文件提交到本地仓库(提交说明必填) git …

Python 全栈系列246 任务调度对象WFlaskAPS

说明 之前已经完全跑通了任务调度,实现了S2S的流转Python 全栈系列243 S2S flask_celery。由于request请求用起来比较别扭,所以创建一个对象来进行便捷操作。 内容 1 功能 WFlaskAPS包含管理定时任务的必要功能 from datetime import datetime from…

嵌入式CAN通信协议详解分析

CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线…

算法课程笔记——自下而上树形DP

算法课程笔记——自下而上树形DP #include<bits/stdc.h>usingnamespacestd; constintN100005; intn,a[N]; longlongdp[N][2]; vector<int> e[N]; voiddfs(intu){for(autov:e[u]){dfs(v);dp[u][1]dp[v][0];dp[u][0]max(dp[v][0],dp[v][1]);}dp[u][1]a[u]; } intmain…

图像分类——猫狗图片

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

如何用Rust获取CPU、内存、硬盘的信息?

目录 一、用Rust获取CPU、内存、硬盘的信息 二、知识点 systemstat 一、用Rust获取CPU、内存、硬盘的信息 首先&#xff0c;需要添加systemstat库到Cargo.toml文件&#xff1a; [dependencies] systemstat "0.8.2" 在Rust代码中使用它&#xff1a; extern crat…

新增柱线组合图、象限图,新增钉钉、飞书、企业微信客户端免密登录,DataEase开源数据可视化分析工具v2.6.0发布

2024年5月13日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.6.0版本。 这一版本的功能升级包括&#xff1a;图表方面&#xff0c;新增了柱线组合图、象限图&#xff1b;仪表板方面&#xff0c;支持批量拖拽字段&#xff0c;外部参数新增支持配置过滤组件&…

日元崩了:日本上市公司转战比特币作对冲

5月13日&#xff0c;日本上市公司Metaplanet发布公告宣布因为政府债务水平高企、实际利率长期处于负值以及日元贬值&#xff0c;Metaplanet特将比特币作为其公司战略储备资产&#xff0c;以回应日本严峻的经济形势。同时也为当地资产管理领域的企业创新开创了先例。 Metaplanet…

AtCoder Beginner Contest 308 B题 Default Price

B题&#xff1a;Default Price 标签&#xff1a; S T L 、 m a p STL、map STL、map、模拟 题意&#xff1a;给定 n n n个有颜色的盘子和 m m m种颜色分别对应的价值 p i p_i pi​&#xff0c; p 0 p_0 p0​表示盘子颜色如果不属于这 m m m种颜色&#xff0c;那对应的价值&…

Flutter 中的 Visibility 小部件:全面指南

Flutter 中的 Visibility 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Visibility 是一个用于根据布尔值条件显示或隐藏小部件的控件。使用 Visibility 可以避免不必要的布局占用&#xff0c;因为它实际上会从布局树中移除符合条件的小部件。 基础用法 Visibility…

Spring AOP切面实现为mapper层指定方法入参字段赋值

需求&#xff1a; 有时候我们在进行某些操作时&#xff0c;可能需要额外进行复制操作&#xff0c;而这些字段往往不是由前端/客户端填写输入的&#xff0c;而是由后端给与&#xff0c;类似于 登陆者、创建时间、更新时间等字段&#xff0c;这时&#xff0c;可以借助AOP指定mapp…

强化学习——马尔可夫奖励过程的理解

目录 一、马尔可夫奖励过程1.回报2.价值函数 参考文献 一、马尔可夫奖励过程 在马尔可夫过程的基础上加入奖励函数 r r r 和折扣因子 γ \gamma γ&#xff0c;就可以得到马尔可夫奖励过程&#xff08;Markov reward process&#xff09;。一个马尔可夫奖励过程由 < S , …

Vue从入门到实战Day05

一、自定义指令 自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能 需求&#xff1a;当页面加载时&#xff0c;让元素将获得焦点 (autofocus在safari浏览器有兼容性) 操作dom&#xff1a;dom元素.focus() mounted() {this.$ref…

安装和配置OceanBase

安装和配置OceanBase 下面是安装和配置OceanBase&#xff08;jieyiobs集群&#xff09;的步骤&#xff1a; 1. 安装YUM工具&#xff08;如果尚未安装&#xff09; yum install -y yum-utils2. 添加OceanBase仓库 为了能从OceanBase的官方源安装软件&#xff0c;需要添加它的…

(delphi11最新学习资料) Object Pascal 学习笔记---第12章操作类(类方法和类数据)

第12章 操作类 ​ 在过去的几章中&#xff0c;你已经了解了 Object Pascal 语言面向对象的基础&#xff1a;类、对象、方法、构造函数、继承、后期绑定、接口等等。现在&#xff0c;我们需要进一步了解与类管理相关的一些更高级、更具体的语言特性。从类引用到类助手(class he…

Elasticsearch解决字段膨胀问题

文章目录 背景Flattened类型的产生Flattened类型的定义基于Flattened类型插入数据更新Flattened字段并添加数据Flattened类型检索 Flattened类型的不足 背景 Elasticsearch映射如果不进行特殊设置&#xff0c;则默认为dynamic:true。dynamic:true实际上支持不加约束地动态添加…

关于milvus go sdk运行时报9223372036854775807 (untvped int constant)overflows int问题

背景 在使用milvus go sdk去查询milvus服务中并列出所有集合的时候遇到一个int溢出问题&#xff0c;依据官方文档&#xff0c;具体代码如下 package localimport ("context""fmt""github.com/milvus-io/milvus-sdk-go/v2/client""log&quo…

vue3使用依赖注入实现跨组件传值

父组件Index.vue: <script setup> import { onMounted, provide, ref } from vue import Child from ./Child.vue import ./index.cssconst count ref(0)provide(count, count)const handleClick () > {count.value }onMounted(() > {}) </script><tem…

spring boot常用的filter

OrderedCharacterEncodingFilter 由 HttpEncodingAutoConfiguration 注入 BeanConditionalOnMissingBeanpublic CharacterEncodingFilter characterEncodingFilter() {CharacterEncodingFilter filter new OrderedCharacterEncodingFilter();filter.setEncoding(this.propert…