vue3封装element-ui-plus组件

这篇具有很好参考价值的文章主要介绍了vue3封装element-ui-plus组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近看视频学习封装公共组件,将学习的内容记录以下,方便以后cv。

下面跟未来的自己说:

        先说思路再放代码嗷,我怕你以后忘了。要cv直接往最后拉。

 一、封装Drawer:抽屉组件

思路:

        其实主要是通过slot去接收父组件传递过来的模板。父组件引用了组件件,往里面传了个表单,子组件就显示表单,传了个按钮,就显示按钮。来一段官方文档。

vue3封装element-ui-plus组件

上面是父组件给子组件传模板。下面我们思考几个问题。

1. 如何点击父组件的按钮让子组件弹出来。

2. 实际开发中,项目中共用一个组件,组件头部内容不一样,组件宽度不一样,组件的很多属性、事件都不一样,如何动态捏。

 一个一个解决:

先解决第一个:如何点击父组件的按钮让子组件弹出来。

因为我的v-model绑定的数据是在子组件里面定义的,父组件想要用子组件里面的定义的事件,我们就可以使用vue3新增的属性   “defineExpose”   。官网是这样说的:

vue3封装element-ui-plus组件

 我擦!这我能理解什么意思???

 百度一番我懂了。啥意思呢,就是vue文件默认是是关闭的,里面的方法你在其他vue文件里面直接调用肯定是不行的,这个方法可以将组件中指定的方法暴露出去,你就能用了。

上代码:

1.父组件代码:

<template>
  <div>
    <el-button type="primary" @click="open">抽屉</el-button>

    <drawer ref="drawerRef" title="抽屉头部" size="50%" @submit="submit" conText="父组件测                    
       试">
    </drawer>
  </div>
</template>


<script setup>
import { ref, reactive } from 'vue';
import drawer from './drawer.vue';

const drawerRef = ref(null)

const open = () => {
  drawerRef.value.open()
}
</script>

2. 子组件代码

<template>
    <div>
        <el-drawer v-model="drawer" :title="title" :direction="left" :size="size">
            <slot></slot>

            <el-button @click="submit">{{ conText }}</el-button>
        </el-drawer>
    </div>
</template>

<script setup>
import { ref } from "vue"
const drawer = ref(false)

const open = () => drawer.value = true
const close = () => drawer.value = false

defineExpose({
    open,
    close
})
</script>

解释一下上面代码,先看子组件,再看父组件。

1. 子组件定义俩个方法,open是打开,close是关闭。分别让drawer的v-model = true和false。

2. 通过defineExposeApi将open和close方法暴露出去。

3. 在父组件上定义一个ref属性。将他赋给drawerRef变量,我们就可以通过drawerRef.value.open( )拿到这个事件。写个打开事件直接调用就好了。

真就这么简单!!!无语,官方文档说的我看一年都不知道什么意思。

但是第一个问题就此解决。下面我们想第二个问题。

既然是共用组件,我父组件在调用子组件,子组件如何根据不同的父组件显示不同的头、屁股、方法呢。

difineProps:子组件接收父组件传过来的值。

difineEmits: 子组件接收父组件传过来的方法。

解决了,这不就全解决了,插会儿腰

具体怎么实现呢,element-plus的drawer有一些属性:

title:显示的标题

modal:是否显示遮罩层

direction: 打开的方向

size:打开的大小 默认30%

将这些v-bind绑定传过去,子组件通过difineProps接收。

将这些数据赋值就好了

抽屉里面写了个按钮,父组件里面写了方法。

父组件通过自定义事件给他传过去。

子组件通过difineEmits拿到父组件传过来的的方法,点击的时候调用这个方法就ok


至此,思路都缕明白了,脑海一片清晰,写完了发现也就那么回事。嘿嘿

下面,直接上全部代码。

父组件

<template>
  <div>
    <el-button type="primary" @click="open">抽屉</el-button>

    <drawer ref="drawerRef" title="抽屉头部" size="50%" @submit="submit" conText="父组件测试">
      <el-color-picker v-model="color1" />
      <el-button :icon="Search" circle />
      <el-button type="primary" :icon="Edit" circle />
      <el-button type="success" :icon="Check" circle />
      <el-button type="info" :icon="Message" circle />
      <el-button type="warning" :icon="Star" circle />
      <el-button type="danger" :icon="Delete" circle />
    </drawer>
  </div>
</template>


<script setup>
import { ref, reactive } from 'vue';
import drawer from './drawer.vue';
import {
  Check,
  Delete,
  Edit,
  Message,
  Search,
  Star,
} from '@element-plus/icons-vue'

const drawerRef = ref(null)
const color1 = ref('#369149')

const open = () => {
  drawerRef.value.open()
}

const submit = () => {
  console.log('这是在父组件定义的方法,子组件触发了');
}


</script>



<style scoped>
.read-the-docs {
  color: #888;
}
</style>

子组件

<template>
    <div>
        <el-drawer v-model="drawer" :title="title" :direction="left" :size="size">
            <slot></slot>
            <el-button @click="submit">{{ conText }}</el-button>
        </el-drawer>
    </div>
</template>

<script setup>
import { ref } from "vue"
const drawer = ref(false)

const open = () => drawer.value = true
const close = () => drawer.value = false

const props = defineProps({
    title: String,
    size: {
        type: String,
        default: '45%'
    },
    conText: {
        type: String,
        default: '测试'
    }
})

const emit = defineEmits(['submit'])
const submit = () => emit('submit')

defineExpose({
    open,
    close
})

</script>

<style lang="scss" scoped></style>

尾篇:

        这些东西对于大佬来讲可能会嗤之以鼻,但是对于刚刚接触的小白来讲可能会触发一些思路,敬我们,为了更美好的明天而努力的打工人文章来源地址https://www.toymoban.com/news/detail-483866.html

到了这里,关于vue3封装element-ui-plus组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3+element-ui + TS封装全局分页组件

    本文介绍了如何使用Vue3、element-ui和TypeScript封装一个全局分页组件。 在开始之前,你需要安装以下环境: Vue3 element-ui TypeScript 这个分页组件提供以下功能: 支持自定义每页显示条数 支持自定义跳转到指定页码 支持显示总页数和总条数 支持自定义样式 分页组件结构 分页组

    2024年02月12日
    浏览(61)
  • Vue3的几款UI组件库:Naive UI、Element Plus、 Ant Design Vue、Arco Design

    vue3系列的三款ui框架简要对比: 框架 Element Plus Naive ui Ant Design Vue Arco Design 简介 element-ui Vue3版本,国内使用广泛 Vue作者推荐的Vue3ui 组件库 Ant Design 的 Vue 实现,组件的风格与 Ant Design 保持同步 ArcoDesign 主要服务于字节跳动旗下中后台产品的体验设计和技术实现 社区活跃度

    2024年02月03日
    浏览(47)
  • Vue3 + TS + Element-Plus —— 项目系统中封装表格+搜索表单 十分钟写五个UI不在是问题

    前期回顾 纯前端 —— 200行JS代码、实现导出Excel、支持DIY样式,纵横合并-CSDN博客 https://blog.csdn.net/m0_57904695/article/details/135537511?spm=1001.2014.3001.5501 目录 一、🛠️  newTable.vue 封装Table 二、🚩 newForm.vue 封装搜索表单  三、📝 TS类型 srctypesglobal.d.ts 四、♻️ 页面使用功能

    2024年01月24日
    浏览(63)
  • vue3 + vite自定义封装vue + element-ui 表格组件,发布到npm包的全过程。

    当我们项目中用到的表格太多的话,就会导致我们的代码量一直增加,所以我们要封装一个公共得组件,通过传参引入来使用,下面这篇文章主要给大家介绍了关于vue3+vite自定义封装vue组件发布到npm包的相关资料,需要的朋友可以参考下。 提示我们要安装 create-vite@4.1.0 得依赖

    2024年02月02日
    浏览(67)
  • 完美解决element-ui-plus按钮点击后不会自动失去焦点

    最近新项目采用了Vue3+element-ui-plus,发现按钮点击后,都不会失去焦点,看着很不舒服,结合网上的解决方法,自己优化了下,采用指令方式,感觉很方便: 1 建立btn指令 2 main.js中注册 3 在按钮中使用指令 然后就搞定了,是不是很方便~

    2024年02月11日
    浏览(47)
  • Vue3 封装 element-plus 图标选择器

    效果一: 效果二:   效果一的这个是把全部的icon图标都让它显示出来,让我们自己选择说选图标 2.1. 全局注册 icon 组件 2.2. 组件实现  2.3. 使用  效果二的这个是渲染后端返回的icon图标 3.1. 全局注册 icon 组件 3.2. 组件实现  3.3. 使用 

    2024年02月07日
    浏览(101)
  • vue3 element-plus el-form的二次封装

    form表单的二次封装 vue3 element-plus el-form的二次封装 属性名 类型 默认值 说明 data Array [] 页面展示数据内容 onChange Function false 表单事件 bindProps Object {} 表单属性 formRef Object {} 表单ref ruleForm Object {} 数据

    2024年02月13日
    浏览(74)
  • Vue3:Elemenu-Plus递归型菜单组件封装(2)

            在上一篇文章中,以Vue2的选项式 API风格,封装了递归型菜单组件,但是这其中存在着一些问题,例如:         【1】子组件menuList.vue中,通过this.$emit()方式定义的事件,在Vue3组合式API风格父组件中可能会被执行多次。之所以说是可能,是因为我这测试中确实遇

    2024年02月13日
    浏览(49)
  • VUE3 学习笔记(五)UI框架Element Plus

    目录 一、安装: 1. 环境支持 2. 版本 3. 安装(包管理器npm安装)  二、使用 1. 完整引入 2. Volar 支持 3. 国际化 三、国际中文化时错误解决 官网:一个 Vue 3 UI 框架 | Element Plus (gitee.io) 1. 环境支持 由于 Vue 3 不再支持 IE11,Element Plus 也不再支持 IE 浏览器。 Edge ≥ 79 Firefox ≥

    2024年02月03日
    浏览(40)
  • vue 基于element-plus el-button封装按钮组件

    封装组件的原则是:组件只是数据流通的一个管道,不要糅合太多的逻辑在里面,是一个纯组件,还要根据自己项目的业务场景做具体的处理。

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包