Vue3从入门到精通(一)
Vue3是Vue.js的最新版本,于2020年9月18日正式发布。Vue3相比Vue2有很多改进和优化,包括但不限于:
更快的渲染速度:Vue3通过使用Proxy代理对象和优化虚拟DOM算法等方式,提高了渲染性能。
更小的体积:Vue3的体积比Vue2更小,打包后的文件更小,加载速度更快。
(资料图片仅供参考)
更好的类型支持:Vue3对TypeScript的支持更加友好,提供了更好的类型支持。
更好的组合式API:Vue3提供了更好的组合式API,使得组件的复用和维护更加方便。
更好的Tree-shaking支持:Vue3对Tree-shaking的支持更加完善,可以更好地优化打包后的代码。
总之,Vue3是一个更加优秀的版本,可以帮助开发者更好地构建高性能、易维护的Web应用程序。
Vue API风格Vue API风格主要有两种:对象风格和函数风格。
对象风格
对象风格是Vue 2.x版本的API风格,它将Vue实例作为一个对象,通过对象的属性和方法来操作Vue实例。例如:
var vm = new Vue({ el: "#app", data: { message: "Hello Vue!" }, methods: { showMessage: function () { alert(this.message) } }})vm.message = "Hello World!"vm.showMessage()
在上面的代码中,我们使用对象风格的API来创建Vue实例,设置数据和方法,并通过vm对象来操作Vue实例。
函数风格
函数风格是Vue 3.x版本的API风格,它将Vue实例作为一个函数,通过函数的参数和返回值来操作Vue实例。例如:
import { createApp } from "vue"const app = createApp({ data() { return { message: "Hello Vue!" } }, methods: { showMessage() { alert(this.message) } }})const vm = app.mount("#app")vm.message = "Hello World!"vm.showMessage()
在上面的代码中,我们使用函数风格的API来创建Vue实例,设置数据和方法,并通过app.mount()方法来挂载Vue实例,然后通过vm对象来操作Vue实例。
总的来说,函数风格的API更加简洁和易于理解,而且更加符合现代JavaScript的编程风格。因此,Vue 3.x版本的API采用了函数风格。
Vue3开发前的准备在开始使用Vue3进行开发之前,需要进行以下准备工作:
安装Node.js和npm
Vue3需要Node.js和npm的支持,因此需要先安装它们。可以在Node.js官网下载对应版本的安装包进行安装。
安装Vue CLI
Vue CLI是Vue.js官方提供的脚手架工具,可以帮助我们快速创建Vue项目。可以使用以下命令全局安装Vue CLI:
npm install -g @vue/cli
选择编辑器
选择一个适合自己的编辑器进行开发,推荐使用Visual Studio Code,它有很多Vue相关的插件和工具。
学习Vue基础知识
在使用Vue3进行开发之前,需要先掌握Vue的基础知识,包括Vue的核心概念、Vue组件、Vue指令、Vue生命周期等。
学习TypeScript
Vue3使用TypeScript进行开发,因此需要先学习TypeScript的基础知识,包括TypeScript的数据类型、接口、类、泛型等。
总的来说,学习Vue3需要一定的前置知识,需要掌握Node.js、npm、Vue CLI、编辑器、Vue基础知识和TypeScript等知识点。
vue3 项目目录结构Vue3项目的目录结构与Vue2有些不同,主要是因为Vue3使用了新的模块化系统和TypeScript语言。
以下是一个Vue3项目的典型目录结构:
├── public│ ├── index.html│ └── favicon.ico├── src│ ├── assets│ ├── components│ ├── router│ ├── store│ ├── utils│ ├── views│ ├── App.vue│ └── main.ts├── tests├── node_modules├── package.json├── tsconfig.json└── README.md
public
:存放静态资源文件,如HTML文件、图片、图标等。
src
:存放源代码文件。
assets
:存放静态资源文件,如CSS、图片、字体等。
components
:存放Vue组件文件。
router
:存放Vue Router路由文件。
store
:存放Vuex状态管理文件。
utils
:存放工具函数文件。
views
:存放页面组件文件。
App.vue
:根组件文件。
main.ts
:入口文件,包括Vue实例的创建和挂载等。
tests
:存放测试文件。
node_modules
:存放项目依赖的第三方库。
package.json
:存放项目的配置信息和依赖库信息。
tsconfig.json
:存放TypeScript编译器的配置信息。
README.md
:项目说明文件。
总的来说,Vue3项目的目录结构与Vue2有些不同,但是基本的结构还是相似的,包括静态资源文件、源代码文件、测试文件、依赖库信息等。
vue3 模板语法Vue3的模板语法与Vue2的模板语法基本相同,但也有一些变化。以下是Vue3的模板语法:
插值表达式
Vue3的插值表达式使用{{}}
,例如:
{{ message }}
指令
Vue3的指令使用v-
前缀,例如:
常用的指令包括:
v-if
:条件渲染。
v-for
:循环渲染。
v-bind
:绑定属性。
v-on
:绑定事件。
v-model
:双向绑定。
计算属性
Vue3的计算属性使用computed
关键字,例如:
{{ reversedMessage }}<script>export default { data() { return { message: "Hello World" } }, computed: { reversedMessage() { return this.message.split("").reverse().join("") } }}</script>
监听器
Vue3的监听器使用watch
关键字,例如:
{{ message }}<script>export default { data() { return { message: "Hello World" } }, watch: { message(newValue, oldValue) { console.log(newValue, oldValue) } }}</script>
生命周期
Vue3的生命周期与Vue2基本相同,但是使用了新的API。例如:
{{ message }}<script>import { onMounted, onUpdated, onUnmounted } from "vue"export default { data() { return { message: "Hello World" } }, setup() { onMounted(() => { console.log("mounted") }) onUpdated(() => { console.log("updated") }) onUnmounted(() => { console.log("unmounted") }) }}</script>
总的来说,Vue3的模板语法与Vue2基本相同,但是使用了新的API,包括computed
、watch
和生命周期等。
在Vue3中,属性绑定使用v-bind:
或简写的:
,例如:
<script>export default { data() { return { className: "red" } }}</script>
上面的代码中, 除了绑定data属性,还可以绑定表达式、计算属性、甚至是方法的返回值。例如: 上面的代码中, 需要注意的是,在Vue3中,绑定属性时,可以使用 上面的代码中, Vue3中的条件渲染和Vue2类似,使用 示例代码如下: 上面的代码中,根据 除了 示例代码如下: 上面的代码中,根据 需要注意的是, Vue3中的列表渲染和Vue2类似,使用 示例代码如下: 上面的代码中,使用 除了数组,也可以遍历对象,例如: 上面的代码中,使用 需要注意的是,每个 在Vue3中,通过 示例代码如下: 上面的代码中,使用 需要注意的是, 在Vue3中,事件处理的方式与Vue2相似,可以使用 绑定事件 可以使用 上面的代码中,使用 事件修饰符 Vue3中提供了新的事件修饰符,包括 上面的代码中,使用 动态事件名 在Vue3中,可以使用方括号来绑定动态事件名。示例如下: 上面的代码中,使用 自定义事件 在Vue3中,可以使用 上面的代码中,使用 在Vue3中,事件传参的方式和Vue2基本相同,可以使用 示例代码如下: 上面的代码中,使用 另外,如果需要在事件处理函数中访问组件实例,可以使用箭头函数来绑定作用域,例如: 上面的代码中,使用箭头函数来绑定作用域,从而在事件处理函数中访问组件实例。 在Vue3中,事件修饰符的使用方式和Vue2基本相同,可以通过在事件名后面添加 常用的事件修饰符包括: 示例代码如下: 上面的代码中,使用不同的事件修饰符来控制事件的行为。例如,使用 在Vue3中,计算属性的使用方式和Vue2基本相同,可以通过在组件的 示例代码如下: 商品数量:{{ quantity }} 商品总价:{{ totalPrice }} 上面的代码中,使用 在模板中,可以像访问普通属性一样访问计算属性,例如 需要注意的是,在Vue3中,计算属性的返回值可以是一个函数,这样可以实现动态计算属性。示例代码如下: 商品数量:{{ quantity }} 商品总价:{{ totalPrice }} 上面的代码中,计算属性 在Vue3中,可以使用 下面是使用对象语法绑定class的示例代码: 上面的代码中,使用 下面是使用数组语法绑定class的示例代码: 上面的代码中,使用 在这个示例中,如果 需要注意的是,在Vue3中,可以使用动态组件来动态渲染不同的组件,这个功能可以使用 上面的代码中,使用 在Vue3中,可以使用 绑定单个样式 可以使用对象语法来绑定单个样式,对象的属性名为样式名,属性值为样式值。示例如下: 上面的代码中,使用 绑定多个样式 可以使用对象语法来绑定多个样式,对象的属性名为样式名,属性值为样式值。示例如下: 上面的代码中,使用 绑定样式数组 可以使用数组语法来绑定多个样式,数组中的元素为样式对象。示例如下: 上面的代码中,使用 绑定样式对象 可以使用计算属性来动态绑定样式对象。示例如下: 上面的代码中,使用计算属性 标签:
Copyright © 2015-2022 亚洲自然网版权所有 备案号:京ICP备2021034106号-51 联系邮箱:5 516 538 @qq.com:class
绑定了一个名为className
的data属性,这个属性的值为"red"
,所以class
属性,值为"red"
。 <script>export default { data() { return { isActive: true } }, methods: { getClass() { return this.isActive ? "active" : "inactive" } }}</script>
:class
绑定了一个三元表达式和一个方法的返回值,这两个值都可以被作为class
属性的值。v-bind:
或简写的:
,但是在绑定事件时,必须使用v-on:
或简写的@
。例如: <script>export default { methods: { handleClick() { console.log("clicked") } }}</script>
@click
绑定了一个handleClick
方法,这个方法会在按钮被点击时被调用。v-if
和v-else
指令来控制元素的显示和隐藏。
show
的值来决定显示哪个v-if
和v-else
,还有v-else-if
可以用来实现多个条件的判断。
type
的值来决定显示哪个v-if
是惰性的,只有当条件为真时才会渲染元素,否则不会渲染。而v-show
则是直接控制元素的显示和隐藏,不管条件是否为真,元素都会被渲染,只是样式被设置为display: none
。v-for
指令来遍历数组或对象,并生成对应的元素。
<script>export default { data() { return { list: ["item1", "item2", "item3"] } }}</script>v-for
指令遍历list
数组,并生成对应的元素。
<script>export default { data() { return { obj: { key1: "value1", key2: "value2", key3: "value3" } } }}</script>v-for
指令遍历obj
对象,并生成对应的元素。
v-for
都需要指定一个唯一的key
属性,用来标识每个元素的唯一性,以便在更新时能够正确地识别每个元素。key
属性可以管理组件或元素的状态。当一个组件或元素的key
属性发生变化时,Vue会认为它是一个不同的组件或元素,从而重新渲染它。
key
属性来管理show
变量的值发生变化时,key
属性也会发生变化,从而重新渲染key
属性的值必须是唯一的,不能重复。如果重复了,会导致Vue无法正确地识别每个组件或元素的状态,从而导致渲染错误。@
或v-on
指令来绑定事件。不同之处在于,Vue3中取消了.sync
修饰符,同时提供了新的修饰符和事件API。@
或v-on
指令来绑定事件,语法与Vue2相同。示例如下: <script>export default { methods: { handleClick() { console.log("Button clicked!") } }}</script>
@click
指令来绑定handleClick
方法,当按钮被点击时,会触发handleClick
方法。.stop
、.prevent
、.capture
、.self
、.once
和.passive
。示例如下:
.stop
修饰符来阻止事件冒泡,当div
元素被点击时,不会触发其父元素的点击事件。 <script>export default { data() { return { eventName: "click" } }, methods: { handleClick() { console.log("Button clicked!") } }}</script>
@[eventName]
指令来绑定动态事件名,事件名为eventName
的值。createApp
方法的provide
和inject
选项来实现自定义事件的传递。示例如下:// App.vue <script>import { provide } from "vue"import EventBus from "./EventBus"export default { setup() { provide("eventBus", EventBus) }, methods: { handleClick() { EventBus.emit("customEvent", "Hello, Vue3!") } }}</script>// EventBus.jsimport mitt from "mitt"const EventBus = mitt()export default EventBus// ChildComponent.vue
provide
方法将事件总线对象EventBus
注入到根组件中,然后在子组件中使用inject
方法获取事件总线对象,并通过on
方法监听自定义事件customEvent
,当事件触发时,更新message
的值。$event
来传递事件对象,也可以使用函数来传递自定义参数。
$event
来传递事件对象,使用"参数"
来传递自定义参数。
.修饰符
的方式来使用事件修饰符。.stop
:阻止事件冒泡.prevent
:阻止事件默认行为.capture
:使用事件捕获模式.self
:只在事件目标自身触发时触发事件.once
:只触发一次事件.passive
:告诉浏览器该事件不会调用preventDefault()
方法,可以优化页面滚动性能 <script>export default { methods: { handleClick() { console.log("点击事件") }, handleScroll() { console.log("滚动事件") } }}</script>
.stop
修饰符来阻止事件冒泡,使用.prevent
修饰符来阻止事件默认行为,使用.capture
修饰符来使用事件捕获模式,使用.self
修饰符来只在事件目标自身触发时触发事件,使用.once
修饰符来只触发一次事件,使用.passive
修饰符来告诉浏览器该事件不会调用preventDefault()
方法,可以优化页面滚动性能。computed
选项中定义计算属性来计算和缓存值。
computed
选项来定义计算属性quantity
和totalPrice
,分别计算商品数量和商品总价。{{ quantity }}
和{{ totalPrice }}
。
totalPrice
返回一个函数,这个函数会动态计算商品总价,考虑到折扣可能会变化,因此需要动态计算商品总价。v-bind:class
指令来绑定一个对象或数组来动态地设置一个元素的class属性。
:class
指令来绑定一个对象,这个对象的属性名是class名称,属性值是一个布尔值,表示是否应用这个class。在这个示例中,如果isActive
为true
,则会应用active
这个class,如果hasError
为true
,则会应用text-danger
这个class。
:class
指令来绑定一个数组,这个数组的元素可以是字符串或对象。如果数组元素是字符串,则表示应用这个class;如果数组元素是对象,则表示应用这个对象中的class。isActive
为true
,则会应用active
这个class,如果errorClass
为text-danger
,则会应用text-danger
这个class。
元素和is
特性来实现。示例代码如下:
元素和is
特性来动态渲染不同的组件。在这个示例中,点击ComponentA
按钮会渲染ComponentA
组件,点击ComponentB
按钮会渲染ComponentB
组件。v-bind
指令或简写的:
来动态绑定样式。
:style
指令来绑定color
样式,样式的值为textColor
的值。
:style
指令来绑定color
和fontSize
两个样式,样式的值分别为textColor
和fontSize
的值。
:style
指令来绑定baseStyles
和customStyles
两个样式对象,样式的值为两个对象的合并结果。
computedStyles
来动态绑定样式对象,样式的值为计算属性的返回值。知识课堂 神话女主角玉漱叫什么
《神话》女主角玉漱扮演者叫金喜善。金喜善,1977年6月11日出生于韩国首尔,毕业于韩国中央大学,韩国女...
字词小课堂 生源地所在地是指什么
生源地是指考生的来源地。本科毕业生的生源地,是指入学前户籍所在地。如学生入学后户籍所在地发生变更...
网络百科全书 倾城绝恋角色介绍
《倾城绝恋》当中的角色有美璃、靖轩、永赫、静妃等。该剧讲述了美璃格格和靖轩之间凄美的爱情故事,并...
知识百科 3.5寸硬盘做移动硬盘好吗
3、5寸的是台式机硬盘组装的,一般都需要外接电源。2、5寸的是笔记本硬盘组装的,不需要外接电源。外接...
百科知识 手机流量不够怎么办
1、打电话,拨打10086,让人工给你开通2、发短信,KTLLJYB发至10086,5元30M、10元70M3、手机登陆移动营...
中文百科 巴厘岛会有地震吗
会发生,2011年10月13日发生里氏6、8级地震,有7人在地震中受伤。巴厘岛是印尼13600多个岛屿中最耀眼的...
知识问答 shepr是什么电视品牌
首先需要了解的是,并没有shepr这个品牌的电视,若用户指的是SHARP电视的话,则是日本夏普电视,而若用...
权威百科知识 丹尼尔戴刘易斯的人物介绍
丹尼尔·戴-刘易斯(Daniel Day-Lewis),于1957年4月29日出生于英国伦敦,一位年轻,坚毅的严肃的男演员...
生活知识 女主角身体不好的宠文小说
1、《美人病怏怏》,作者檀月;2、《病猫西施》,作者艾佟;3、《绣球猫》,作者馥梅;4、《何所夏凉》,作...
知识导航 开门见山歇后语的前一句是什么
愚公的居处位于王屋和太行之间,每日一推门,便可开门见山。
重庆:到2025年25个重点领域企业能效全部达到基准水平
3月18日,重庆日报记者从市发展改革委获悉,日前,市发展改革委、市经济信息委、市生态环境局、市市场监...
重磅!2021“发现重庆之美”获奖名单揭晓
3月19日,2021发现重庆之美颁奖典礼在线上举行,最美城市管理人、最美坡坎崖、最美街头绿地、垃圾分类时...
去年重庆回收废弃农膜1.4万吨 农膜回收率达89.31%
3月16日,市五届人大常委会第六十九次主任会议听取了市政府关于《重庆市人大常委会对市人民政府农业面源...
申报分两批!今年国家级博士后科研工作站新设站工作启动
3月19日,重庆日报记者从市人力社保局获悉,为推动产学研深度融合,加强博士后工作平台建设,我市将开展...
浙江鄞州:“水、电、气、数”通办专窗实现城乡公共服务均等化
近日,在宁波市鄞州区邱隘镇公共事务服务中心,66岁的邱隘镇沈家新村居民邱秀月在一个窗口相继办理了不...
打开“浙里办” 浙江1000家农贸市场农产品可线上比价
今天哪个菜场的五花肉最便宜?食品安全抽检结果怎么样?这些问题,浙江居民只需打开浙里办APP上的浙里市场...
浙江鉴湖国家湿地公园规划发布 打造乡村数字旅游
19日上午,鉴湖国家湿地公园规划发布暨东鉴湖农旅观光体验启动仪式在绍兴市越城区陶堰街道举行。当天,...
总投资超10亿元!6个石化装备运维项目在岱山签约
日前,总投资超10亿元的6个石化装备运维项目在岱山经济开发区集中签约。此次签约的项目占地106亩,规划...
如何避免成为“买而不做”的“装备党”祝 杰
自恋是人的天性,人们总是希望自己是更好的,那么自己拥有的事物,也就相应地被自我赋予了更高的价值,...
山西临汾:率先在全省建起农村集体经济开发区
3月17日,临汾市农村集体经济发展(集团)有限公司在临汾经济开发区揭牌。以此为标志,临汾率先在全省建起...
一线工作近22年的缉毒警:我知道坏的是毒品不是人性
“影子”般的缉毒警:一线工作22年,我知道坏的是毒品不是人性 如果我不继续干,别人也要干,缉...
广东肇庆“毒驾连撞5车致1死”肇事司机被批捕
1月5日14时30分许,广东肇庆市端州区一男子赵某毒驾连撞5车,致一人死亡。 1月10日,澎湃新闻(ww...
江西最大文物倒卖案宣判:倒卖国家二级文物 9人获刑
中新网南昌1月10日电 (冷峥嵘 张一怡)江西省共青城市人民法院10日发布消息称,近日,该院依法审结...
青海保障门源地震后生活必需品应急物资
中新网西宁1月10日电 (记者 孙睿)记者10日从青海省商务厅获悉,青海海北州门源县6 9级地震灾害发...
广西东兴口岸恢复通关 入境需网上预约
呼和浩特:寒假期间有条件的学校要开展校内托管服务
“中国最后一个原始部落”翁丁老寨火灾原因公布
北京市十五届人大五次会议胜利闭幕
天津市委市政府致全市父老乡亲的慰问信:我们一定能够打赢
天津米面油存量由20天提高至30天 超市菜市场进货量翻倍
兰州名师话“美育”:“尚乐立人”分层培优 以“美”润教
子夜直击,天津寒天战“疫”
重庆姐弟被生父扔下坠亡案上诉期结束 一审法院暂未收到两被告人上诉状
天津:划定封控区 全市开展全员核酸检测
江歌母亲江秋莲:尊重法院判决,法律认定在我意料之中
中国边疆“北方第一所”:9名民警守护“生命禁区”
辟谣!网传“封控区管控区相继解封”通知并非西安
河南安阳9日12时至24时新增11例本土确诊病例
老人5折环卫工8折生活困难免费 这家面馆背后有个暖心事
铁路公安以110幅优秀书画作品庆祝人民警察节
本周中东部冷空气频繁 东北等地有降雪
河南新增本土确诊病例60例
“打拐”民警眼里的百态人生:见证一份份不愿放弃的爱
迎腊八北京晴天上线 阵风6至7级体感冻人
多省份倡议春节“非必要不离开”,这地补贴1000元
伪造国家机关证件典型案例发布 有力打击制假贩假行为
15年照顾170多个新生儿 金牌月嫂“漂”到海外去看娃
江歌母亲江秋莲诉刘鑫案一审将于今日宣判
河南省安阳市两地划为高风险地区 一地划为中风险地区
员工迟到一次罚一千引争议 单位惩戒员工法律边界何在?
以体育人 秀出“青年范儿”
保安、厨师曾被竞业限制 企业滥用竞业限制让员工很苦恼
反诈老陈破圈:人民群众在哪 就把反诈宣传开展到哪
一所中职学校的育人实践
各地严惩恶意欠薪 保障农民工及时拿到工资
中学生成剧本杀行业潜在消费人群 多方助推行业“净化”
“这就是我最好的选择”
对餐饮浪费说“不”(百姓关注)
校园“直通车” 服务“零距离”
琉璃河遗址 两段铭文共证北京三千年建城史
千元修复个人征信报告?银行:“征信修复”都是骗局
琉璃河遗址 两段铭文共证北京三千年建城史
北京公交将开展无人驾驶道路测试
河南郑州调整五地为中风险区域 公路入郑需核酸检测阴性证明
“共享法庭”让金融消费者畅享“智慧司法”便利
《传奇2》网游著作权纠纷案峰回路转 最高法五份裁决四份改判一份发回重审
三代警察:从未放弃的28年
“胡叔叔”的寻亲工作室
天津津南本轮本土疫情第3—20例阳性感染者活动轨迹公布
“团圆”行动刑侦专家吕游 每一个案例都有单独的技术方案
河南“战疫”直面五重考验
开考古书店日均两三个顾客 流量时代她决心仍是只卖书
冬奥开幕在即 “双减”催热冰雪课堂
“不得以任何借口拒收患者”彰显生命至上
经验知识 请问什么是手机游戏CPS渠道
cps渠道就是按用户充值的收益进行分成的渠道,是pc站和某些市场的用户充值用的通道。特点是arpu值高,用...
5月LPR超预期下调 6月经济社会循环预计步入正轨
时隔四个月,LPR(贷款市场报价利率)再度下调。5月20日,中国人民银行授权全国银行间同业拆借中心公布:1...
浙江金华首启气膜方舱实验室 最多日检100万人份
(抗击新冠肺炎)浙江金华首启气膜方舱实验室 最多日检100万人份 中新网金华1月10日电(董易鑫 杜...
天津市新增本土病例病毒属奥密克戎变异株 全市开展全员核酸检测
央视网消息:昨天(1月8日)24时,天津市疾控中心完成了新增2例本土病例新冠病毒全基因组测序。经分析比对...
入境人员拒不落实防疫措施致三里屯部分地区被封?警方:谣言
中新网1月9日电 据北京市公安局朝阳分局官方微信消息,针对网传“境外入境人员拒不落实防疫措施擅自外...