vue3-组件基础

什么是组件

组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行处理。在实际应用中,组件常常被组织成层层嵌套的树状结构。

定义一个组件

我们一般会将 Vue 组件定义在一个单独的 .vue 文件中,这被叫做单文件组件 (简称 SFC):

<script lang="ts" setup>
import { ref } from 'vue'const count = ref(0)
</script><template><div class="container"><button @click="count++">你点击了我 {{ count }} 下.</button></div>
</template><style lang="scss" scoped>
.container {
}
</style>

效果:

使用组件

要使用一个子组件,我们需要在父组件中导入它。

组件可以被重用任意多次

<script lang="ts" setup>
import { ref } from 'vue'
import ButtonCount from '@/components/ButtonCount.vue'
</script><template><div class="container"><ButtonCount /><br /><ButtonCount></ButtonCount><br /><button-count></button-count></div>
</template><style lang="scss" scoped>
.container {
}
</style>

效果:

  • 每当你使用一个组件,就创建了一个新的实例

  • 在单文件组件中,推荐为子组件使用 PascalCase 的标签名,以此来和原生的 HTML 元素作区分。

<ButtonCount /> 或者
<ButtonCount></ButtonCount>
  • 如果你是直接在 DOM 中书写模板 (例如原生 <template> 元素的内容),模板的编译需要遵从浏览器中 HTML 的解析行为。

<!-- 如果是在 DOM 中书写该模板 -->
<button-count></button-count>

父组件向子组件传值 props

定义一个帖子的组件 通过 title 向子组件传标题的值

<script lang="ts" setup>
import { ref } from 'vue'
import Post from '@/components/Post.vue'const posts = ref([{ id: 1, title: '文章1标题' },{ id: 2, title: '文章2标题' },{ id: 3, title: '文章3标题' }
])
</script><template><div class="container"><Post v-for="post in posts" :key="post.id" :title="post.title"></Post></div>
</template><style lang="scss" scoped>
.container {
}
</style>

效果:

监听事件子组件事件 emits

通过点击标题后面的按钮放大标题

<script lang="ts" setup>
import { ref } from 'vue'
import Post from '@/components/Post.vue'const posts = ref([{ id: 1, title: '文章1标题', font: 1 },{ id: 2, title: '文章2标题', font: 1 },{ id: 3, title: '文章3标题', font: 1 }
])
</script><template><div class="container"><Post:style="{ fontSize: post.font + 'em' }"v-for="post in posts":key="post.id":title="post.title"@changeFont="post.font += 0.1"></Post></div>
</template><style lang="scss" scoped>
.container {
}
</style>

效果

通过插槽来分配内容

可以向组件中传递内容

子组件

<script lang="ts" setup>
import { ref } from 'vue'
</script><template><div class="container"><div class="alert-box"><strong>Error!</strong><br /><slot /></div></div>
</template><style lang="scss" scoped>
.container {.alert-box {color: #666;border: 1px solid red;border-radius: 4px;padding: 20px;background-color: #f8f8f8;}strong {color: red;}
}
</style>

父组件

<script lang="ts" setup>
import { ref } from 'vue'
import DangerBox from '@/components/DangerBox.vue'
</script><template><div class="container"><DangerBox> 可以传入自定义的内容 替换 slot </DangerBox></div>
</template><style lang="scss" scoped>
.container {
}
</style>

效果:

如上所示,我们使用 <slot> 作为一个占位符,父组件传递进来的内容就会渲染在这里。

动态组件

有些场景会需要在两个组件间来回切换,比如 Tab 界面

通过 :is 属性实现组件切换 :is 的值可以是以下几种

  1. 被注册的组件名

  2. 导入的组件对象

当使用 <component :is="..."> 来在多个组件间作切换时,被切换掉的组件会被卸载。 我们可以通过 <KeepAlive> 组件强制被切换掉的组件仍然保持“存活”的状态。

  <script lang="ts" setup>
import { ref } from 'vue'
import TabA from '@/components/TabA.vue'
import TabB from '@/components/TabB.vue'const currentTab = ref('TabA')
const tabs = ref({ TabA, TabB })
</script><template><div class="container"><buttonv-for="(_, tab) in tabs":key="tab":class="['tab-button', { active: currentTab === tab }]"@click="currentTab = tab">{{ tab }}</button><component :is="tabs[currentTab]" class="tab"></component></div>
</template><style lang="scss" scoped>
.container {.demo {font-family: sans-serif;border: 1px solid #eee;border-radius: 2px;padding: 20px 30px;margin-top: 1em;margin-bottom: 40px;user-select: none;overflow-x: auto;}.tab-button {padding: 6px 10px;border-top-left-radius: 3px;border-top-right-radius: 3px;border: 1px solid #ccc;cursor: pointer;background: #f0f0f0;margin-bottom: -1px;margin-right: -1px;}.tab-button:hover {background: #757070;}.tab-button.active {background: #ea7a7a;}.tab {border: 1px solid #ccc;padding: 10px;}
}
</style>

效果:

至此 vue基础告一段落,恭喜能坚持看到现在的小伙伴,你们都很棒哟!可以多看几遍打牢基础。

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

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

相关文章

TypeScript 实用技巧(中)

十四、向类型添加特殊值 原文&#xff1a;exploringjs.com/tackling-ts/ch_special-values.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 14.1 在带内添加特殊值 14.1.1 向类型添加 null 或 undefined 14.1.2 向类型添加符号 14.2 在带外添加特殊值 14.2…

[亲测有效]CentOS7下安装mysql5.7

前言 近期项目需要搭配mysql一起存储相关数据&#xff0c;但对mysql的版本有要求&#xff0c;于是在服务器搭建了mysql5.7&#xff0c;顺便记录一下搭建步骤和踩坑解决步骤。 目录 前言 一、清除旧安装包 二、安装YUM 三、使用yum命令即可完成安装 四、重新设置密码 五、…

文心一言 v.s. ChatGPT:多角度对比测评“追赶者”能否超越?

ChatGPT自发布以来就引发了关注热潮&#xff0c;如今国内大模型的发展也是如火如荼、百花齐放&#xff1a;比如百度的文心一言、阿里的通义千问、讯飞的星火大模型等等&#xff0c;那么作为后起之秀的国内大模型与ChatGPT相比哪个更好用呢&#xff1f;“追赶者”能否实现超越&a…

使用Unity创建VisionPro应用

1、下载特定Unity版本 Unity账号需要是Pro账号,普通账号不行,目前只支持这1个Unity版本,不要下载任何其它版本:unityhub://2022.3.11f1/d00248457e15) 其它条件:使用Mac电脑M系列芯片,XCode15 Beta2及以上 参考资料: 苹果官网:苹果官网 Unity官网:Unity官网 官方教程…

Network:use `--host` to expose

前言&#xff1a; 最近开始学习使用vite创建项目&#xff0c;但是 vite 启动后提示&#xff1a;Network:use --host to expose&#xff0c;从而导致在同一个局域网内的其他人也无法访问到我本地的项目。 导致原因&#xff1a;通过官方文档了解到不显示地址是因为IP没有做配置&a…

浏览器无网

目录 1.运行网络诊断&#xff0c;确认原因 原因A.远程计算机或设备将不接受连接(该设备或资源(Web 代理)未设置为接受端口“7890”上的连接 原因B.DNS服务器未响应 场景A.其他的浏览器可以打开网页&#xff0c;自带的Edge却不行 方法A&#xff1a;关闭代理 Google自带翻译…

【江科大】STM32:中断系统(理论)

文章目录 中断系统为什么要使用中断中断优先级中断嵌套STM32的中断系统如何管理这些中断NVIC的结构![请添加图片描述](https://img-blog.csdnimg.cn/c77b038fd63a4ddfbcd3b86f6dfe596b.png) 优先级窗口看门狗&#xff08;WWDG&#xff09;&#xff1a;外部中断模块的特性&#…

前后端分离项目中实现图形验证码

图形验证码在我们的日常生活中时经常用到的&#xff0c;一般用于用户的登录、注册等。 图形验证码在互联网应用中的作用是提高安全性、防止滥用和保护用户隐私。它是一种简单而有效的人机验证技术&#xff0c;帮助保护系统和用户免受自动化攻击的影响。 本次我们通过spring b…

损失函数是指什么

损失函数&#xff08;Loss Function&#xff09;是用来衡量模型预测输出与实际目标之间差异的函数。在机器学习和深度学习中&#xff0c;损失函数是模型训练的关键部分。其目标是通过最小化损失函数来使模型的预测尽可能接近实际的标签或目标值。 在监督学习中&#xff0c;模型…

Adobe Media Encoder 2023下载安装教程,ME 2023安装教程,附安装包和工具,无套路,轻松搞的安装

前言 Adobe Media Encoder是一个视频和音频编码应用程序&#xff0c;可让针对不同应用程序和观众&#xff0c;以各种分发格式对音频和视频文件进行编码。包括专门设计的预设设置&#xff0c;以便导出与特定交付媒体兼容的文件&#xff0c;可以按适合多种设备的格式导出视频&am…

漫漫数学之旅010

文章目录 经典格言数学习题古今评注科学家小传&#xff08;一&#xff09;艾伦凯&#xff08;二&#xff09;托马斯C黑尔斯 经典格言 计算机的归宿是融入我们的生活&#xff0c;就像其它一切我们习以为常的东西&#xff1a;手表、纸、铅笔和衣服&#xff0c;我们不再把它们看作…

Hbas简介:数据模型和概念、物理视图

文章目录 说明零 BigTable一 Hbase简介二 HBase 访问接口简介三 行式&列式存储四 HBase 数据模型4.1 HBase 列族数据模型4.2 数据模型的相关概念4.3 数据坐标 五 概念&物理视图 说明 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容&#xff0c;仅供学习…

Gen AI大潮来袭!8个Salesforce新岗位,你会选择哪个?

人工智能席卷全球&#xff0c;企业对如何整合GenAI有着浓厚的兴趣。为启动企业的GenAI转型浪潮&#xff0c;Salesforce宣布与埃森哲和德勤建立合作伙伴关系&#xff0c;并计划推出更多支持项目。 目前&#xff0c;Salesforce领域的其他咨询公司正在提高员工技能&#xff0c;以…

Apache Zeppelin结合Apache Airflow使用1

Apache Zeppelin结合Apache Airflow使用1 文章目录 Apache Zeppelin结合Apache Airflow使用1前言一、安装Airflow二、使用步骤1.目标2.编写DAG2.加载、执行DAG 总结 前言 之前学了Zeppelin的使用&#xff0c;今天开始结合Airflow串任务。 Apache Airflow和Apache Zeppelin是两…

C语言数据结构(3)——线性表其二(单链表)

欢迎来到博主的专栏——C语言数据结构 博主id&#xff1a;代码小豪 文章目录 单链表不连续存储的线性表单链表单链表的结构头指针单链表的操作打印单链表 空链表单链表的插入尾插法 头插法 单链表的查找任意位置处的节点插入单链表节点的删除 销毁链表 单链表 顺序表是一个物…

万字长文详解Java线程池面试题

王有志&#xff0c;一个分享硬核 Java 技术的互金摸鱼侠 加入 Java 人的提桶跑路群&#xff1a;共同富裕的Java人 今天是《面霸的自我修养》第 6 篇文章&#xff0c;我们一起来看看面试中会问到哪些关于线程池的问题吧。数据来源&#xff1a; 大部分来自于各机构&#xff08;J…

【K8S】Kubernetes 中滚动发布由浅入深实战

目录 一、Kubernetes中滚动发布的需求背景1.1 滚动发布1.2 滚动发布、蓝绿发布、金丝雀发布的区别 二、Kubernetes中实现滚动发布2.1 定义Kubernetes中的版本2.2 创建 Deployment 资源对象2.2.1 在 Yaml 中定义 Deployment 资源对象2.2.2 执行命令创建 Deployment 资源对象 三、…

Asp.net core 框架入门

概述 appsettings.json&#xff1a;配置文件&#xff0c;数据库连接字符串配置信息 Program.cs&#xff1a;程序入口文件&#xff08;里面有个Main方法&#xff09; Startup.cs&#xff1a;启动配置文件 依赖项&#xff1a;管理项目所依赖的第三方组件的安装&#xff0c;配…

WampServer

开发笔记 推荐链接php无法保存SESSION问题部署SSL时候产生的问题 推荐链接 链接目录 php无法保存SESSION问题 php.ini文件和phpForApache.ini 文件 里面都有 对路径的控制&#xff0c;相关路径问题可能也需要进行修改&#xff0c;打开文件搜索wamp64或wamp 就可以看到了&…

“深入理解RabbitMQ交换机的原理与应用“

深入理解RabbitMQ交换机的原理与应用 引言1. RabbitMQ交换机简介介绍1.1 什么是RabbitMQ&#xff1f;1.1.1 消息中间件的作用1.1.2 RabbitMQ的特点和优势 1.2 RabbitMQ的基本概念1.2.1 队列1.2.2 交换机1.2.3 路由键 1.3 交换机的作用和分类1.3.1 直连交换机&#xff08;direct…