封装一个vue3的公共组件

news/2025/3/14 1:43:53/

在Vue 3中,封装公共组件的场景包括但不限于以下几种情况:

  • 重复使用的组件:如果你发现某个组件在多个地方重复使用,那么将其封装成公共组件是很有意义的。比如,页面中的各种表单控件(输入框、下拉框、日期选择器等)经常可以被封装成公共组件。

  • 业务无关的通用组件:当有一些组件是业务无关的,并且可以在不同的项目中重复使用时,将其封装成公共组件。比如各种Loading、提示框、消息提示等。

  • 复杂组件的拆分:有些复杂的组件可以被拆分成若干公共组件,每个公共组件承担不同的责任,这样做不但提高了可维护性,也方便了代码的重用。

  • 提高可维护性:封装公共组件可以提高代码的可维护性和可读性。通过组件封装,将业务逻辑和UI组件分离,使得代码结构更加清晰。

  • 标准化UI风格:封装公共组件有助于保持一致的UI风格。例如,如果你希望所有的表单输入框都具有相同的风格和交互行为,那么可以封装一个通用的表单输入框组件。

这里使用的场景是重复使用的组件:定义一个公共的快递组件选择,首先在项目的src下面定义一个文件夹components,然后在里面创建文件ExpressList.vue。
在这里插入图片描述
ExpressList.vue文件里面的代码

<template><div class="expressValue-list"><el-select v-model="expressValue" class="w-220" placeholder="请选择" @change="changeExpress"><el-option label="全部" value="" v-if="isAll" /><el-option v-for="(item, index) in expressList" :key="item.id" :value="isId ? item.id : item.code" :label="item.name" /></el-select></div>
</template>
<script setup >
import { onBeforeMount, ref, watch } from "vue" 
const expressList = ref([])
const props = defineProps({listValue: [String, Number],isId: {default: false,type: Boolean}, //是否需要id传默认falseisAll: {default: false,type: Boolean},//是否开启查找全部功能,默认false//可以加其它任何根据项目需要的条件,上面的只是举例
})
const emits = defineEmits(['update:listValue']);
const expressValue = computed({get: () => { return props.listValue },set: newVal => emits('update:listValue', newVal)
});
const changeExpress = (value) => {expressValue.value = value
}
//这里真实项目掉接口获取
const getExpress = () => { expressList.value =    [{"id": "1","code": "YD","name": "韵达速递",},{"id": "2","code": "ZTO","name": "中通快递",},{"id": "3","code": "SF","name": "顺丰速运",},{"id": "4","code": "YTO","name": "圆通速递",},{"id": "5","code": "YZPY","name": "邮政快递包裹",},{"id": "6","code": "STO","name": "申通快递",},{"id": "7","code": "JD","name": "京东快递",},{"id": "8","code": "EMS","name": "EMS",},{"id": "9","code": "HTKY","name": "百世快递",},{"id": "10","code": "JTSD","name": "极兔速递",},{"id": "11","code": "DNWL","name": "丹鸟",},{"id": "12","code": "EMS","name": "邮政电商标快",},{"id": "13","code": "SF","name": "顺丰快运",}]
}
onBeforeMount(() => {getExpress()
})
</script><style lang="scss" scoped>
.expressValue-list {
.w-220{width:220px;
}
</style>

到这里一个基础的下拉选择快递的公共组件模版就完成了,最后那么在项目里面怎么使用呢???
向下面这样使用

//父组件
<template><div class="page"><ExpressList v-model:listValue="express" :isAll="true"/></div>
</template>//express就是双向 绑定的选择下拉框的值//isAll=ture ,开启全部查找的功能

最后看截图
在这里插入图片描述
注 :因为公共组件会在项目里面多次使用,所以可以全局注册组件,这样就不用在项目里面再次引入路径链接了。


http://www.ppmy.cn/news/1405626.html

相关文章

XenCenter 2024 导入虚拟机

导入虚拟机 虚拟机位置 导入到那一个服务器 导入虚拟机存放存储位置 虚拟机网卡配置 SR修复功能&#xff0c;看自己需求 虚拟机恢复确认最终配置 恢复好的虚拟机 虚拟机模板转换

【JAVASE】学习类与对象的创建和实例化

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 目标&#xff1a; 1. 掌握类的定义方式以及对象的实例化 2. …

Leetcode 3100. Water Bottles II

Leetcode 3100. Water Bottles II 1. 解题思路2. 代码实现 题目链接&#xff1a;3100. Water Bottles II 1. 解题思路 这一题就是按照题目翻译一下&#xff0c;按照题中给出的规则不断进行bottle的兑换&#xff0c;直至无法兑换为止&#xff0c;即可得到最终的答案。 2. 代…

爬虫 红网时刻 获取当月指定关键词新闻 并存储到CSV文件

目标网站&#xff1a;红网 爬取目的&#xff1a;为了获取某一地区更全面的在红网已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&#xff0c;csv&#xff0c;bs4&…

wps没保存关闭了恢复数据教程

有时候我们因为电脑问题会忘记保存就关闭wps导致数据丢失&#xff0c;不知道wps没保存关闭了怎么恢复数据&#xff0c;其实数据是无法恢复的。 wps没保存关闭了怎么恢复数据 1、wps没有数据恢复功能&#xff0c;不过可以开启自动备份。 2、我们可以先点击wps左上角的“文件”…

LeetCode207、210 课程表(图 dfs 拓扑排序)

官方题解主要思想是使用dfs进行拓扑排序。 课程表 class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:edges collections.defaultdict(list) visited [0] * numCourses # 将列表初始化为numCourses个0# result []valid T…

JAVA----线程与进程的区别与联系

java中线程与进程的区别 1. 单位的不同 进程是系统分配资源的基本单位; 线程是系统调度执行的基本单位. 2. 独立与共享 每个进程拥有自己的独立内存空间和系统资源, 不同的进程之间彼此独立&#xff0c;无法直接共享数据; 线程是进程内的一个执行单元,一个进程可以包含多…

使用WebRTC实现简单直播

WebRTC 是一个强大的实时通信技术&#xff0c;它允许用户直接在网页浏览器之间进行音视频通话和数据共享&#xff0c;无需任何外部插件。结合 WebSocket&#xff0c;我们可以构建一个简单的直播系统&#xff0c;让用户能够发布自己的实时视频流&#xff0c;同时允许其他用户观看…