Vue笔记(三)深入组件

组件注册

组件注册有两种方式:

  1. 全局注册
    可以使用Vue应用实例的.component()方法,让组件在当前Vue应用中全局可用,.component()方法可以被链式调用。全局注册的组件可以在此应用的任意组件的模版中使用。
    import { createApp } from 'vue'
    import { MyComponent } from './MyComponent.vue'const app = createApp({
    })
    app.component('MyComponent',MyComponent)
  2. 局部注册
    局部注册的组件需要在它的父组件中显示导入,并且只能在父组件中使用,依赖关系更加明确。
    <script>
    import MyComponent from './MyComponent'export default{components:{MyComponent}
    }
    </script><template><MyComponent />
    </template>s
    

Props

一个组件需要显示声明它所接受的props。声明props的方式有两种:

  1. 字符串数组
    export default{props:['animal','zoo'],created(){//props 会暴露到 this 上console.log(this.animal);console.log(this.zoo);}
    }
    
  2. 对象的形式
    export default{props:{title:string,age:number}
    }
    

静态Prop、动态Prop

  1. 静态Prop传参形式
    <child-component title="this is title" />
    
  2. 动态Prop传参形式,使用v-bind或缩写:来进行动态绑定
    <child-component :title="自定义的变量"/>
    

事件

触发与监听事件

  1. 触发(子组件):在组件模版表达式中,可以直接使用$emit方法触发自定义事件
    //1. 第一种触发方式
    <button @click="$emit('click')">触发click事件</button>
    //2. 第二种触发方式,函数触发, this.$emit
    export default{methods:{submit(){this.$emit('click');}}
    }
    
  2. 父组件可以通过v-on@来监听事件
    //1. 触发
    <child-component @click="alert(1)" />
    //2. 事件监听器也支持 .once 修饰符
    <child-component @click.once="alert(1)" />
    

事件参数
可以给触发的事件传入参数,父组件可以处理传入的参数

  1. 子组件传入参数
    <button @click="emit('click',1,2)">传入参数给父组件</button>
    
  2. 父组件处理参数
    <child-component @click="fun1"/>//处理参数的方法
    methods:{fun1:function(var1,var2){console.log(var1);console.log(var2);}
    }
    

插槽 Slots

  1. 父组件传入,插槽内容可以是任意合法的模版内容,不局限于文本,可以传入多个HTML元素,甚至组件
    <child-component>传入内容
    </child-component>
    
  2. 子组件插槽占位
    <h1><slot></slot>
    </h1>
    

插槽渲染作用域
插槽可以访问到父组件的数据作用域,因为插槽内容本身是在父组件中定义的。插槽无法访问子组件的数据。

插槽默认内容
如果父组件没有提供任何内容,可以为插槽指定默认内容

<button><slot>默认内容</slot>
</button>

具名插槽

  1. 子组件为插槽指定名称,没有提供name<slot>会隐式地命名为default
    <div><slot name="header"></slot><slot name="footer"></slot><slot></slot>
    </div>
  2. 父组件指定插槽名称传入内容,v-slot简写#
    <child-component><template #header>This is header</template><template #footer>This is footer</template><template #default>This is default</template>
    </child-component>
    

动态插槽名
可以使用动态的插槽名,传给子组件内容

<child-component><template v-slot:[defineSlotName]></template><template #[defineSlotName]></template>
</child-component>

作用域插槽
某些场景下插槽的内容想要同时使用父组件域内和子组件域内的数据,子组件可以在渲染时将一部份数据提供给插槽

  1. 默认插槽
    //子组件插槽插入数据
    <div><slot :name="zqq" :age="18"></slot>
    </div>
    //父组件使用
    <child-component v-slot="vslot">{{ vsolt.name }} {{ vsolt.age }}
    </child-component>
    
  2. 具名作用域插槽
    //子组件插槽传入数据,name是vue特别保留的attribute,不会作为props传递给插槽
    <slot name="header" message="hello">
    </slot>
    //父组件使用
    <child-component><template #header="data">{{ data s}}</template>
    </child-component>
    

依赖注入

一个父组件相当于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级多深,都可以注入由父组件提供给整条链路的依赖。关键字:provideinject

  1. provide(提供),为后代组件提供数据
    //为后代组件提供数据
    export default{privode:{message:'hello'}
    }
    //为后代组件提供data()定义的数据属性,以函数形式使用provide
    export default{data(){return{message:'hello'}},provide:(){return{message:this.message;}}
    }//在应用层为全部组件提供依赖
    import { createApp } from 'vue'const app = createApp({})
    // message是注入的名称,hello是值
    app.provide('message','hello');
    
  2. Inject(注入),子组件注入父组件(隔代父组件也可以)提供的依赖
    export default{inject:['message'],data(){return{//注入会在组件自身状态之前被解析,可以通过this访问注入的值localMessage:this.message}}
    }
    

注入别名和默认值

export{inject:{// localMessage是自定义的本地别名,后续访问注入的内容,使用this.localMessagelocalMessage:{from:'message',default:'default' //可以指定默认值}}
}

和响应式数据配合使用
为了保证注入方和供给方之间的响应性链接,需要使用computed()函数提供一个计算属性

import default{data(){return{message:'hello'}}provide(){return{message:computed(() => this.message)}}}
}

异步组件

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

const AsyncComp = defineAsynComponet(() => {return new Promise(() =>{//...从服务器获取组件resolve(/*获取到的组件*/);})
})

导入Vue单文件组件

import { defineAsyncComponent } from 'vue'const AsyncComp defineAsyncComponent(() => import('./components/MyComponent.vue'))

最后得到的AsyncComp是一个外层包装过的组件,仅在页面需要它渲染时才会调用加载内部实际组件的函数。它会将受到的props和插槽传给内部组件,所以可以使用这个异步的包装组件无缝地替换原始组件,同时实现延迟加载。

异步组件注册

  1. 全局注册
    app.component('MyComponent',defineAsyncComponent(() => import('./components/MyComponent.vue'))
    
  2. 局部注册
    <script>
    impoty { defineAsyncComponent } from 'vue'export default{components{MyComponent:defineAsyncComponent(() = import('./components/MyComponent.vue'))}
    }
    </script>
    

加载与错误状态

const AsyncComp = defineAsyncComponent({//加载组件函数loader:() => import(',MyComponent'),//展示加载组件的延迟时间,默认200msdelay:200,//加载失败后展示的组件errorComponent:ErrorComponent,//加载组件超时时间,默认没有超时时间,如果超市,会显示 加载失败展示的组件timeOut: 3000
})

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

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

相关文章

阿里云生态离线数仓

1. 大数据开发治理平台 DataWorks 功能齐全&#xff1a;10多年大数据建设沉淀完整的平台&#xff0c;覆盖数据开发治理的全生命周期 简单易用&#xff1a;全图形化界面&#xff0c;SQL为主的数据开发方式 安全稳定&#xff1a;双11日千万级任务稳定调度&#x…

一:C语言常见概念

一&#xff1a;C语言常见概念 1.认识C语言&#xff1a; ​ C语言是人和计算机交流的语言 ​ C语言是一门面向过程的语言&#xff0c;而C&#xff0c;Java&#xff0c;Python等是一门面向对象的语言 ​ 软件开发&#xff08;项目&#xff09;&#xff1a;面向过程面向对象 …

maven下载安装与配置

文章目录 1. Maven下载2. 配置settings.xml2.1 指定Maven的本地仓库2.2 配置阿里云提供的镜像仓库2.3 配置 Maven 工程的基础 JDK 版本 3. 配置环境变量3.1 检查 JAVA_HOME 配置是否正确3.2 配置 MAVEN_HOME3.3 配置PATH3.4 验证 1. Maven下载 【Maven官网地址】 【Maven下载…

微服务架构下的分布式事务

系统软件为了实现一定的业务&#xff0c;会将现实中的人、事、物进行抽象表示&#xff0c;并将其映射为系统中的模型。 业务模型大致可以按以下来构建&#xff1a; 1、定义系统中应该存在哪些实体、实体上有哪些属性。 2、定义实体之间的各种拓扑关系&#xff0c;如从属、嵌套…

2023五岳杯量子计算挑战赛数学建模思路+模型+代码+论文

赛题思路&#xff1a;12月6日晚开赛后第一时间更新&#xff0c;获取见文末名片 “五岳杯”量子计算挑战赛&#xff0c;是国内专业的量子计算大赛&#xff0c;也是玻色量子首次联合移动云、南方科技大学共同发起的一场“企校联名”的国际竞赛&#xff0c;旨在深度融合“量子计算…

Python处理Excel文件并与数据库匹配做拼接

Python处理Excel文件并与数据库匹配做拼接 需求&#xff1a;Python处理Excel中数据并于数据库交互匹配得到账号信息等其他操作 Python实现 import os import pandas as pd import pymssql import warnings import time# 提取速率函数 def extract_broadband_speed(speed):if…

【外观模式】SpringBoot集成mail发送邮件

前言 发送邮件功能&#xff0c;借鉴 刚果商城&#xff0c;根据文档及项目代码实现。整理总结便有了此文&#xff0c;文章有不对的点&#xff0c;请联系博主指出&#xff0c;请多多点赞收藏&#xff0c;您的支持是我最大的动力~ 发送邮件功能主要借助 mail、freemarker以及rocke…

Java 泛型相关知识

什么是泛型? Java 泛型(generics)是JDK5中引入的一种参数化类型特性。 为什么使用泛型,使用泛型的好处? 代码更健壮(只要编译期没有警告,那么运行期就不会出现 ClassCastException)代码更简洁(不用强转)代码更灵活,复用什么是参数化类型: 把类型当参数一样传递<…

C语言绝对值得一看的常识讲解:柔性数组补充篇

今天突然看到一个比较特别的知识点——柔性数组。它是在C99中出现的一种特别的数组&#xff0c;具体是指结构体中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做『柔性数组』成员。 目录 1.柔性数组的定义 2.柔性数组的特点 3.柔性数组的使用举例 4.柔性数组的优…

React基础语法整理

安装&#xff1a; yarn create react-app reatc-lesson --template typescript yarn create 创建一个react-app的应用 项目名称 typescript 的模板react-app 官方地址 https://create-react-app.bootcss.com/docs/adding-typescriptreact 语法文档 https://zh-hans.react.dev…

Vue笔记(一)基础

VUE 官方文档&#xff1a;https://cn.vuejs.org/ 创建VUE项目 前提&#xff1a;已安装 16.0 或更高版本的 Node.js 进入要创建的目录&#xff0c;执行命令&#xff1a;npm create vuelatest 安装依赖&#xff0c;启动&#xff1a; //进入项目目录&#xff0c;运行命令安装依赖…

基于Vue框架的电子商城购物平台小程序的设计与开发

基于JavaWebSSMVue电子商城购物平台小程序系统的设计和实现 源码获取入口KaiTi 报告/Ren务书Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告/Ren务书 一、选题的目的和意义 自从微信推出了微信小程序…

使用命令行移除VSAN中故障磁盘

原创作者&#xff1a;运维工程师 谢晋 使用命令行移除VSAN中故障磁盘 前提故障盘移除 前提 客户有套VSAN环境内有一台服务器的磁盘组出现了一块故障的数据盘&#xff0c;但该盘已经处于完全掉线状态&#xff0c;无法进行正常移除。如下图&#xff1a; 如果遇到这种情况&am…

P9 LinuxC 进程概述 终端启动的程序父进程是终端

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f6f8;推荐专栏3: ​​​​​​《链表_ChenP…

【1】一文读懂PyQt简介和环境搭建

目录 1. PyQt简介 1.1. Qt 1.2. PyQt 1.3. 关于PyQt和PySide 2. 通过pip安装PyQt5 3. 无法运行处理 4. VSCode配置PYQT插件 PyQt官网:Riverbank Computing | Introduction 1. PyQt简介 PyQt是一套Python的GUI开发框架,即图形用户界面开发框架。 Python中经常使用的GU…

FreeRTOS的内存管理方法(超详细)

内存管理 我们知道每次创建任务、队列、互斥锁、软件定时器、信号量或事件组时&#xff0c;RTOS 内核都需要 RAM &#xff0c; RAM 可以从 RTOS API 对象创建函数内的 RTOS 堆自动动态分配&#xff0c; 或者由应用程序编写者提供。 如果 RTOS 对象是动态创建的&#xff0c;那么…

Leetcode—2646.最小化旅行的价格总和【困难】

2023每日刷题&#xff08;五十三&#xff09; Leetcode—2646.最小化旅行的价格总和 算法思想 看灵神的 实现代码 class Solution { public:int minimumTotalPrice(int n, vector<vector<int>>& edges, vector<int>& price, vector<vector&l…

发现数学之美--微积分的起源和用途(一文搞懂微积分)

数学&#xff0c;改变世界的基石。微积分十九世纪的三大自然发现之一&#xff0c;迪卡尔建立了解析几何&#xff0c;把数与图结合在一起&#xff0c;微积分的发现与创立&#xff0c;是数学新的里程碑&#xff0c;解决了常规方法无法解决的问题&#xff0c;是一次伟大的革命。迪…

服务器数据损坏了有办法修复吗 ?

对于企业网站来说&#xff0c;数据库往往是服务器中最核心的部分&#xff0c;所以一旦数据库发生损坏&#xff0c;将会给企业带来巨大的损失&#xff0c;因 此数据库的数据恢复功能变得越来越重要了。在服务器运行过程中&#xff0c;由于断电、操作不当或者是客观原因损坏到服务…

git安装和配置

git安装和配置 一、软件介绍 Git是一个免费开源的分布式版本控制系统&#xff0c;旨在快速高效地处理从小型到大型项目的所有内容。 Git易于学习&#xff0c;占地面积小&#xff0c;性能闪电般快。它以廉价的本地分支、方便的暂存区域和多个工作流等功能胜过了Subversion、C…