【Vue】第四篇

01. 插槽Slots

在这里插入图片描述
模板内容:html结构,可能是div标签等

也就是说插槽是用来显示html结构的。

实操:

App.vue中:
在这里插入图片描述
ShotsBase组件中:
在这里插入图片描述
结果:在这里插入图片描述

所以,<slot></slot>在哪,html结构就在哪显示:
在这里插入图片描述

02. 插槽Slots(续集)

(1)渲染作用域:
在这里插入图片描述
在这里插入图片描述

如果这个标签内容不是写死的,那么应该由父组件来动态传递数据还是由子组件呢

答案是:父组件

在这里插入图片描述

因为插槽是在子组件渲染

在这里插入图片描述

(2)默认内容
在这里插入图片描述

(3)具名插槽

组件之间传递这个插槽,内容不是固定的,可以是一个/两个/三个,且是可以分开的。

下图中传递了两个插槽,每个插槽分别有两个h3标签,我们希望能各渲染一个:
在这里插入图片描述
在这里插入图片描述
但是结果重复渲染了:
在这里插入图片描述

接下来我们使用具名插槽
在这里插入图片描述
在这里插入图片描述
结果如我们所愿:
在这里插入图片描述

注意(简写):
在这里插入图片描述v-slot在父组件中)

03. 插槽Slots(再续集)

在这里插入图片描述
所以我们的需求是:把子组件数据传递给插槽
在这里插入图片描述
怎么实现呢?

简记为:子传父,父合并,父传子,子渲染

在这里插入图片描述

父组件用一个名为“slotProps”接收(也可自己起名),slotProps是一个对象,对象里面包含子元素传递过来的那一条数据
如下形式便可拿到数据并显示在页面中。在这里插入图片描述

如果是具名插槽呢?如下:
在这里插入图片描述
在这里插入图片描述

04. 组件生命周期

从组件被创建那一刻开始,到组件被卸载那一刻,这是组件的整个生命周期。
在这里插入图片描述

在vue的生命周期中,有很多关键节点。比如我们所说的组件被创建的时候、组件初次被渲染了、组件的数据被更新了、组件销毁了。

生命周期钩子函数是自动执行的,不需要被调用。

(记:粉红色部分)
在这里插入图片描述

在这里插入图片描述

实操:(下面部分以此类推,就没有截出来了)
在这里插入图片描述

运行:

控制台自动跳出前四条数据
点击“更新数据”按钮,页面数据由“更新之前”改为“更新之后”,
控制台跳出如下两条数据(最后两条)
在这里插入图片描述

05. 生命周期应用

在这里插入图片描述

(1)应用一:
在这里插入图片描述
在这里插入图片描述

(2)应用二:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述

不过,created不太好,改为mounted更好。
因为created的时候,ui还没渲染,mounted的时候才渲染。
(上图中数据能出来,是因为数据量小)

对于网页而言,先把组件结构渲染出来重要,而不是先拿到数据。
在这里插入图片描述

所以,我们应该用mounted,把整个结构已经渲染完成,渲染完成之后再去获取数据,再把页面渲染到浏览器界面之上。

06. 动态组件

有些场景会需要两个组件间来回切换。
在这里插入图片描述

结果:
在这里插入图片描述

07. 组件保持存活

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
切换回A(卸载B)没加载那两句话,是因为B组件中没有写入控制台打印输出那两句话。

在这里插入图片描述
加上keep-alive之后,切换到B时A不会被卸载,自然切换回A时数据和保持被操作后的一样。

08. 异步组件

同步与异步的概念:
同步:多个功能,ABC三个功能,排队按顺序执行。
异步:多个功能,ABC三个功能同时进行。

异步组件的目的:优化组件的性能。或者说优化项目的性能

在这里插入图片描述

同步组件:假如我们的项目中,有100个组件,如果全都以正常组件加载的方式加载,项目一旦运行,100个组件会同时被加载出来,然后项目才能正常运行。
异步组件:用到哪个组件加载哪个。
(优势:加开项目时,加载会更快,符合业界的需求)

实现方式:
在这里插入图片描述

没有使用异步组件时,打开网络请求
在这里插入图片描述
然后把这些清理掉,再做组件切换的时候,会发现,没有新的网络请求再形成了
说明第一次打开这个项目的时候,所有的内容都已经被加载,包含A、B组件。

使用异步组件之后:
在这里插入图片描述
重新请求了一次B组件。说明第一次只加载了A组件。

09. 依赖注入

在这里插入图片描述
解决方案:
在这里插入图片描述
在这里插入图片描述

也可以传递动态数据:
在这里插入图片描述
子组件亦如此:
(接收到的数据也可以放入data内处理然后再返回)
在这里插入图片描述
在这里插入图片描述

注意:组件之间一定要有关系才能传递。
在这里插入图片描述

还有一个需要注意的细节:
在这里插入图片描述
实操:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10. Vue应用

这节课其实是要告诉大家,Vue项目是从哪开始执行的。

先前讲的都是Vue的API,并没有说Vue是哪开始入口,然后一步一步执行下来的。一直都是利用Vue的脚手架 或者是 Vue的工具来创建好项目,然后直接在项目当中修改。

我们首先要说的是应用实例
在这里插入图片描述
ps:这段代码存在于main.js中。

什么是应用实例呢?
你可以把应用实例理解为Vue的实例对象,因为是Vue的项目,所有每一个Vue项目肯定都要有一个Vue的实例,从Vue的实例开始一步步往下执行

在这里插入图片描述

代码解读:
从Vue中引入createApp,然后用它来创建一个App对象
(Vue的实例对象)

对比两图,可以看出App是根组件,那么,什么是根组件呢?
在这里插入图片描述

因为Vue是组件化开发,Vue的项目都是从第一个组件开始的,而我们这个App。vue就是第一个组件,也被称为根组件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当然,单纯把Vue项目创建出来,并把根组件传入这个项目还不算是完成。还要做一件事,那就是挂载应用

在这里插入图片描述

必须要执行app.mount并挂载一个根的容器。

因为Vue并不能直接浏览器中运行,必须挂载在容器当中。
在这里插入图片描述

为什么是#app?它是用来找index.html的。
在这里插入图片描述
日后,vue中所有的页面的内容都将放在这个div容器当中呈现。

所以,运行项目时:
在这里插入图片描述
其实真正的运行入口是index.html文件,所有的内容都挂在里面。

此外,注意:
在这里插入图片描述
构建工具 : (Webpack和Vite) 用来打包以及发布。

其实,我们所有所写的Vue代码,最终都会被编译成一个main.js文件。

然后我们在html中把它引入进来,整个程序就正常运行了。

Vue 学习到第三篇章可能会涉及自定义组件开发,其中创建一个时间线组件是一个常见的实践项目。时间线(Timeline)通常用于展示事件按照时间顺序排列的视图,例如项目进度、新闻动态等。在 Vue 中,你可以按照以下步骤构建一个基本的时间线: 1. **组件设计**: - 定义一个名为 `Timeline` 的组件,包含两个主要部分:时间点列表 (`timelineItems`) 和日期轴 (`timelineAxis')。 - 时间点列表可以是每个事件的一个卡片组件,包含标题、描述和时间戳。 2. **数据结构**: - 创建一个数据模型,比如 `Event` 对象,包含 `title`, `description`, 和 `timestamp` 等属性。 3. **模板编写**: - 使用 `v-for` 指令遍历 `timelineItems` 数组,并渲染每个时间点组件。 - 利用 `<template>` 标签,分别定义时间点卡片和日期轴的HTML结构。 4. **事件处理**: - 可能需要处理用户交互,如点击时间点查看详情,这时可以使用 `@click` 或者 `v-on` 来绑定事件监听器。 5. **样式定制**: - 通过 CSS 或者使用 CSS预处理器(如 SASS/LESS)来给组件添加样式,比如动画效果、布局调整等。 ```html <template> <div class="timeline"> <div class="timeline-axis"></div> <div v-for="(item, index) in timelineItems" :key="index" class="timeline-item"> <event-card :item="item" :index="index"></event-card> </div> </div> </template> <script> export default { components: { EventCard }, data() { return { timelineItems: [] }; } }; </script> <style scoped> .timeline-axis { /* ... */ } .timeline-item { /* ... */ } .event-card { /* ... */ } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值