【前端Vue学习笔记】组件注册方式 组件传递数据 组件事件 透传 插槽slot 组件生命周期 动态组件 异步组件 依赖注入 Vue应用

文章目录

    • 组件注册方式
      • 全局注册
      • 全局注册的缺点
      • 推荐使用局部注册
        • 步骤
    • 组件传递数据-Props
      • 步骤
      • 注意事项
    • 组件传递多种数据类型
    • 组件传递Props效验
      • 默认值
      • 必选项
      • 注意警告
    • 组件事件
      • 父组件代码
      • 子组件代码
    • 组件之间传递数据的方案
      • 父传子
      • 子传父
    • 组件事件配合`v-model`使用
      • 步骤:
      • 效果
    • 组件数据传递
      • 父传子
      • 子传父
    • 透传
      • 禁止attribute继承
    • 插槽Slots
      • 应用场景:
      • 渲染作用域
      • 默认内容
      • 具名插槽
    • 插槽Slots再续集
    • 组件生命周期
      • 生命周期函数
    • 生命周期应用
    • 动态组件
      • 点击前
      • 点击后
    • 组件保持存活
    • 异步组件
    • 依赖注入
      • Provide
      • Inject
      • 注意事项
    • Vue应用
      • 应用实例
      • 根组件
      • 挂载应用
      • 公共资源

组件注册方式

  • 一个vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。
  • 组件注册有两种方式:全局注册和局部注册

全局注册

  • 需要在main.js文件中操作。
  • 先引入,再注册
    在这里插入图片描述

全局注册的缺点

  • 全局注册,但并没有被使用的组件无法在生产打包时被自动移除,如果全局注册了一个组件,即时它并没有被实际使用,它仍然会出现在打包后的JS文件中
  • 全局注册在大型项目中使项目的依赖关系变得不那么明确,在父组件中使用子组件时,不太容易定位子组件的实现,和使用过多的全局变量一样,这可能会影响应用长期的可维护性。

推荐使用局部注册

步骤
  1. 引入组件
  2. 注入组件
  3. 显示组件
    在这里插入图片描述

组件传递数据-Props

  • 组件与组件之间不是完全独立的,而是有交集的,那就是组件与组件之间是可以传递数据的
  • 传递数据的解决方案就是props

步骤

  1. 在父组件中传递参数:
    <Child :title="message"/>
  2. 在子组件中使用props接受数据,并展示出来
    在这里插入图片描述

注意事项

注意事项
props传递数据,只能从父级传递到子级,不能反其道而行。

组件传递多种数据类型

  • 通过props传递数据,不仅可以传递字符串类型的数据,还可以是其他类型,例如:数字、对象、数组等,但实际上任何类型的值都可以作为props的值被传递。

组件传递Props效验

  • Vue组件可以更细致地声明对传入的props的校验要求

  • 需要在子组件的props中进行一个type声明
    在这里插入图片描述

默认值

  • 通过default关键字来声明

注意
数字和字符串可以直接default,但是如果是数组和对象,必须通过工厂函数返回默认值。
在这里插入图片描述

必选项

  • 通过required关键字在声明,参数为一个布尔值。

注意警告

  • Props是只读的

组件事件

  • 在组件的模板表达式中,可以直接使用$emit方法触发自定义事件
  • 触发自定义事件的目的是组件之间传递数据

父组件代码

在这里插入图片描述

子组件代码

在这里插入图片描述

组件之间传递数据的方案

父传子

  • props

子传父

  • 自定义事件(this.$emit)

组件事件配合v-model使用

  • 如果是用户输入,我们希望在获取数据的同时发送数据配合v-model来使用

步骤:

  1. 在子组件中使用v-model将表单绑定,并且通过侦听器watch时刻侦听表单的变化
  2. 一旦侦听到了变化就使用$emit将子组件中的数据传递到父组件
  3. 父组件接收子组件的数据并呈现出来

效果

  • 表单为子组件中的
  • 上面的为父组件中展示出来的数据
    在这里插入图片描述

组件数据传递

父传子

  • props

子传父

  • 自定义事件(this.$emit)

除了上述两种方案外,其实props也可以实现子传父

  • 通过子组件使用父组件的函数来实现

透传

  • 透传attribute 指的是传递给一个组件,却没有被该组件声明为propsemits的attribute或者v-on事件监听器。

  • 最常见的例子就是classstyle和`id

  • 当一个组件以单个元素为根做渲染时,透传的attribute会自动被添加到根元素上。

禁止attribute继承

<script>
export default{
	inheritAttrs:false;
}
</script>

插槽Slots

应用场景:

  • 在某些场景中,我们可能想要为子组件传递一些模板片段,让子组件在他们的组件中渲染这些片段
    在这里插入图片描述
    在这里插入图片描述

  • <slot>元素是一个插槽出口,标示了父元素提供的插槽内容将在哪里被渲染
    在这里插入图片描述

渲染作用域

  • 插槽内容可以访问到父组件的数据作用域,因为插槽内容本身是在父组件模板中定义的。

默认内容

  • 在外部没有提供任何内容的情况下,可以为插槽指定默认内容。
<template>
	<h3>插槽标题</h3>
	<slot>插槽默认值</slot>
</template>

具名插槽

  • 可以定义多个插槽并给他们起不同的名字,根据名字来进行调用
    在这里插入图片描述

插槽Slots再续集

  • 在某些场景下插槽的内容可能想要同时使用父组件域内和子组件域内的数据
  • 方法:子元素中的内容先传递给父元素,父元素合并内容后再传递给子元素slot

组件生命周期

  • 每个Vue组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模块,挂载实例到DOM,以及在数据改变时更新DOM,在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。

在这里插入图片描述

在这里插入图片描述

生命周期函数

  • 创建期:beforeCreate created
  • 挂载期:beforeMounte mounted
  • 更新期:beforeUpdate updated
  • 销毁期:beforeUnmount unmounted

生命周期应用

  • 两个常见的应用:
    1. 通过ref获取元素DOM结构
    2. 模拟网络请求渲染数据
      - 要先进行UI渲染然后再获取数据,所以将请求数据放在mounted函数中实现

动态组件

  • 有些场景会需要在两个组件之间来回切换,比如Tab界面
  • 下面代码实现点击按钮实现切换两个组件
    在这里插入图片描述

点击前

在这里插入图片描述

点击后

在这里插入图片描述

组件保持存活

  • 当使用<component :is="">来在多个组件之间来回切换时,被切换掉的组件会被卸载,我们可以通过<keep-alive>组件强制被切换掉的组件仍然保持“存活”状态
    在这里插入图片描述

异步组件

  • 优化组件性能
  • 在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件,Vue提供了defineAsyncComponent方法来实现此功能

依赖注入

在这里插入图片描述

Provide

  • 要为组件后代提供数据,需要使用到provide选项
  • 子代使用inject接收
  • 除了在一个组件中提供依赖,我们还可以在整个应用层面提供依赖

Inject

  • 要注入上层组件提供的数据,需要使用inject选项来声明

注意事项

  • provideinject只能由上到下的传递,不能反向传递。

Vue应用

应用实例

  • 每个Vue应用都是通过createApp函数创建一个新的应用实例在这里插入图片描述

  • 在一个Vue项目中,有且只有一个Vue的实例对象

根组件

  • 我们传入createApp的对象实际上是一个组件,每个应用都需要一个“根组件”,其他组件将作为其子组件。
    在这里插入图片描述

挂载应用

  • 应用实例必须在调用了.mount()方法后才能渲染出来,该方法接收一个容器参数,可以是一个实际的DOM元素或者是一个CSS 选择器字符串
    在这里插入图片描述

公共资源

  • src目录下的assets文件夹的作用就是存放公共资源,例如:图片、公共CSS或者字体图标等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux网络编程5——Posix API和网络协议栈,使用TCP实现P2P通信

文章目录 Posix API和网络协议栈&#xff0c;使用TCP实现P2P通信1. socket()2. bind()3. listen()4. connect()5. accept()6. read()/write(), recv()/send()7. 内核tcp数据传输7.1 TCP流量控制7.2 TCP拥塞控制——慢启动/拥塞避免/快速恢复/快速重传 8. shutdown()9. close()9…

【线下培训】龙信科技应邀参与了由教育部网络安全与执法虚拟教研室(中国刑事警察学院)举办的学术讲座

文章关键词&#xff1a;电子数据取证培训、产学研推进、手机取证、介质取证 2024年10月23日&#xff0c;龙信科技应邀参与了由教育部网络安全与执法虚拟教研室&#xff08;中国刑事警察学院&#xff09;举办的学术讲座。在这次学术交流中&#xff0c;我们公司的技术专家陈杰以…

Redis Search系列 - 第一讲 创建索引

目录 一、引言二、全文检索基本概念三、创建索引 一、引言 Redis Search 是 Redis 的一个模块&#xff0c;用于提供全文搜索和二级索引功能。它允许在 Redis 数据库中执行复杂的搜索查询&#xff0c;并支持多种数据类型和查询操作。以下是 Redis Search 的一些关键特性&#x…

学习threejs,使用canvas样式化粒子

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PointCloud简介1.11 …

Vue3+ts+vite自动导入vue的依赖

Vue3tsvite自动导入vue的依赖 unplugin-auto-import 主要依赖 npm i -D unplugin-auto-import// vite.config.ts import AutoImport from unplugin-auto-import/viteexport default defineConfig({plugins: [AutoImport({ imports: ["vue", "vue-router"…

团体标准审查结果一般会有哪几种情况?

1. 通过&#xff1a; • 标准质量高&#xff1a;标准的内容符合国家法律法规和相关标准的要求&#xff0c;技术指标科学、合理、先进&#xff0c;具有较强的适用性和可操作性 • 材料完整规范&#xff1a;送审材料齐全&#xff0c;标准的格式、文本编写等符合规定&#xff0c;为…

深入拆解TomcatJetty——Tomcat生命周期与多层容器

深入拆解Tomcat&Jetty&#xff08;三&#xff09; 专栏地址&#xff1a;https://time.geekbang.org/column/intro/100027701 1 Tomcat组件生命周期 Tomcat如何如何实现一键式启停 Tomcat 架构图和请求处理流程如图所示&#xff1a; 对组件之间的关系进行分析&#xff0c;…

deploylinux的ubuntu系统无法成功安装使用MySQL❓

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

如何编辑加密的PDF文件?

PDF文件打开之后&#xff0c;发现编辑功能都是灰色的&#xff0c;无法使用&#xff0c;无法编辑PDF文件&#xff0c;遇到这种情况&#xff0c;是因为PDF文件设置了限制编辑导致的。一般情况下&#xff0c;我们只需要输入PDF密码&#xff0c;将限制编辑取消就可以正常编辑文件了…

由于导出的数据名字中带有/,导致Matlab打不开,怎么办?

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

Spring Boot集成PageHelper分页插件详解---补充

这里写目录标题 内容补充 内容 ⭐最新版!SpringBoot正确集成PageHelper姿势&#xff0c;不再被误导&#xff01; Spring Boot集成PageHelper分页插件详解 原本看了这两篇文章&#xff0c;觉得写的其实挺好的。但是发现两篇文章里面&#xff0c;对于方法的使用&#xff0c;都…

昆虫种类识别数据集昆虫物种分类数据集YOLO格式VOC格式 目标检测 机器视觉数据集

一、数据集概述 数据集名称&#xff1a;10类昆虫图像数据集 数据集包含了多种农作物中常见的昆虫种类&#xff0c;包括军虫、豆蓟象、红蜘蛛、水稻瘿蚊、水稻卷叶蛾、水稻叶蝉、水稻水蚤、小麦薄翅薄翅蔗蝇、白背飞虱和黄稻螟。 1.1可能应用的领域 农业害虫监测与防控&#x…

C++,STL 044(24.10.24)

内容 1.set容器的构造函数。 2.set容器的赋值操作。 运行代码 #include <iostream> #include <set>using namespace std;void printSet(set<int> &s) {for (set<int>::iterator it s.begin(); it ! s.end(); it){cout << *it << &…

好书推荐|《Python最优化算法实战》

简介 本书以理论结合编程开发为原则&#xff0c;使用Python作为开发语言&#xff0c;讲解优化算法的原理和应用&#xff0c;详细介绍了Python基础、Gurobi 优化器、线性规划、整数规划、多目标优化、动态规划、图与网络分析、智能优化算法。对于算法部分的每一种算法都包含原理…

算法设计与分析——动态规划

1.动态规划基础 1.1动态规划的基本思想 动态规划建立在最优原则的基础上&#xff0c;在每一步决策上列出可能的局部解&#xff0c;按某些条件舍弃不能得到最优解的局部解&#xff0c;通过逐层筛选减少计算量。每一步都经过筛选&#xff0c;以每一步的最优性来保证全局的最优性…

NavMesh只制作可移动的导航网,清除多余不可走区域

只制作可移动的导航网。它使存储文件大小减小并提高性能。它消除了迁移到随机区域的问题。添加链接描述 1.如何使用 2.创建一个包含“NavMeshCleaner”组件的对象。Andadd指向可定制区域。 按住控制键并单击添加点。如果要移动它&#xff0c;请按 输入上的control键并单击。您…

flashback database 闪回数据库

1.修改闪回区大小&#xff0c;路径&#xff0c;保留时间 SQL> show parameter db_recovery_file_dest SQL> show parameter db_flashback_retention_targetSQL> alter system set db_recovery_file_dest_size20G scopeboth;System altered.SQL> alter system set …

ffmpeg视频滤镜: 裁剪-crop

滤镜简述 crop官网链接 > FFmpeg Filters Documentation crop滤镜可以对视频进行裁剪&#xff0c;并且这个滤镜可以接受一些变量比如时间和帧数&#xff0c;这样我们实现动态裁剪&#xff0c;从而实现一些特效。 滤镜使用 参数 out_w <string> ..…

云电脑使用教程标准版

云电脑&#xff0c;也称为云桌面&#xff0c;是一种通过互联网连接远程服务器&#xff0c;使用虚拟桌面环境来执行计算任务的技术。川翔云电脑通过创建软件镜像&#xff0c;让用户能够快速启动并使用预配置的软件和资料&#xff0c;提供高效且经济的云服务。相较于公有云服务&a…

83.【C语言】数据结构之顺序表的尾部插入和删除

目录 3.操作顺序表 2."伪"插入顺序表的元素 分析尾部插入函数SLPushBack 代码示例 SeqList.h main.c free(指针)出错的几种可能的原因 3."伪"删除顺序表元素 2.分析尾部删除函数SLPopBack 代码示例 错误检查 两种解决办法 1.判断size是否为负…