高级组件封装技巧--按钮的封装

news2024/9/23 11:19:07

我们做一些重要操作的时候,往往需要弹窗一个提示框,告诉用户这是一个需要小心的操作,是否继续,用户点击确定后才会开始执行,这种操作写起来比较繁琐,如下所示,要写一堆代码,今天我来讲解下组件的高级封装技巧,让你一行代码搞定有弹出框的点击操作

透传 Attributes

想要自己封装组件,props和attributes的知识是必不可少的,详细的可以自己看文档

props文档: https://cn.vuejs.org/guide/components/props.html

attributes文档:  https://cn.vuejs.org/guide/components/attrs.html

简单来说,组件有个$props属性,里面接收了所有你在组件props里面定义的属性,网上很多资料说$props是不包含方法的,其实这种说法是错误的,当你在emits里面申明了方法时,这些方法也会包含在$props里面,而$attrs里面则包含了所有不在props和emits里面申明的属性和方法,这种特性很有用,可以让我们很方便的对组件进行封装和扩展

属性的绑定

v-bind="$attrs"这种写法可以绑定所有未在props里面定义的属性,比如我定义了一个组件叫ui-button,代码如下,那我这个ui-button表现就和el-button一样,所有el-button内置的属性都适用于ui-button

  <el-button v-bind="$attrs">
  </el-button>

属性的合并与覆盖 

对于有些属性,vue会进行合并,如class和style,对于大部分属性,后面的会覆盖前面的,比如使用<el-button v-bind="$attrs" type="primary"/>即使$attrs里面有type,后面的type也会覆盖$attrs里面的type

需要特别注意的是方法不会覆盖,而是会合并,也就是说<el-button v-bind="$attrs" @click="click"/>这总写法,如果$attrs里面有click监听,那会和后面的click方法一起执行

ui-button的封装

我们定义一个组件叫ui-button,封装了element plus的el-button,这个ui-button只扩展了一个属性叫confirmText,如果confirmText为空,则表现跟el-button一模一样,直接触发点击事件,如果confirmText不为空,则弹框确定,只有点击确定才会触发click,这里需要注意的是我们在emits里面申明了click方法,这样click方法不会出现在$attrs里面,就不会和后面的@click冲突了

<template>
  <el-button v-bind="$attrs" @click="click($event)">
    <slot></slot>
  </el-button>
</template>

<script>
import {ElMessageBox} from "element-plus";

export default {
  name: "ui-button",
  inheritAttrs: false,
  emits: ['click'], // 申明对外触发的事件
  props: {
    confirmText: { type: String }, // 提示文本,如果不为空则会弹出提示信息
  },
  methods: {
    click(e) {
      if (this.confirmText) {
        ElMessageBox.confirm(
            this.confirmText,
            '警告',
            {
              confirmButtonText: '确认',
              cancelButtonText: '取消',
              type: 'warning',
            },
        ).then(() => {
          this.$emit('click', e)
        }).catch(() => {
        })
      } else {
        this.$emit('click', e)
      }
    },
  }

}
</script>

<style scoped>

</style>

ui-button的使用

使用起来跟el-button一模一样,只是比el-button多了个confirmText属性,设置了该属性就会弹框确认,使用起来超级方便

<template>
  <div>
    <ui-button type="danger" @click="onDelete(1)" confirmText="是否删除该条记录?">删除</ui-button>
  </div>
</template>

<script setup>
import UiButton from "@/components/ui-button.vue";

function onDelete(id) {
  console.log('执行删除,id: ' + id)
}
</script>

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

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

相关文章

2024年恩施建筑企业人员初中级专业技术职务评审

2024年恩施建筑企业人员初中级专业技术职务评审 恩施中级职称申报一般是一年1次&#xff0c;具体视情况而定。申报中级职称人员须相应专业水平能力测试成绩合格且在有效期内&#xff0c;同时应当符合相应专业申报条件。专业能力水平能力测试成绩3年有效。 2024年恩施建筑类初…

2024年8月 | 涉及侵权、抄袭洗稿违规行为公示

为护社区良好氛围&#xff0c;守护清朗网络空间&#xff0c;CSDN持续对侵害他人权益、抄袭洗稿违规内容进行治理。 今年7月&#xff0c;CSDN共计删除涉及抄袭洗稿内容xx篇&#xff0c;下架侵权资源xx个&#xff0c;封禁违规账号42个。 部分违规账号公示 账号昵称处置结果封禁创…

STM32CubeMX学习记录——串口通信(含蓝牙通信)

文章目录 一、学习目的二、CubeMX配置三、代码编写 一、学习目的 串口通信是一种简单且广泛应用的通信方式。本文的学习目标是通过CubeMX工具配置串口通信&#xff0c;并编写相应代码&#xff0c;以实现串口助手打印信息以及蓝牙通信等功能。 二、CubeMX配置 &#xff08;1&am…

docker容器常用指令,dockerfile

docker&#xff1a;容器&#xff0c;主要是解决环境迁移的问题&#xff0c;将环境放入docker中&#xff0c;打包成镜像。 docker的基本组成&#xff1a;镜像(image)&#xff0c;容器(container)&#xff0c;仓库(repository)。镜像相当于类&#xff0c;容器相当于类的实例对象…

0基础深度学习项目12:基于TensorFlow实现彩色图片分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 一、创建环境二、前期准备2.1 设置GPU2.2 导入数据2.2.1 在TensorFlow框架中导入CIFAR-10数据集2.2.2 数据归一化 2.3数据可视化 三、构建简单的CNN网络&…

kubernetes集群部署oracle 11g数据库服务

背景&#xff1a; 因业务上线需要&#xff0c;研发中心要求在kubernetes测试集群部署一个oracle 11g的数据库&#xff0c;用于业务功能调试。 一、实施部署oracle 11g数据库&#xff1a; 1、拉取oracle 11g的镜像&#xff1a; [rootharbor-02 ~]# docker pull registry.cn-h…

Java之MySQL

1、数据库三大范式 每个字段不可再分&#xff0c;不冗余 非主键字段完全依赖于主键 2、drop 删除整张表&#xff0c;不可回滚&#xff1b;delete删除部分数据行&#xff1b;truncate保留表 删除所有数据 3、innodb存储引擎 支持行级锁、表级锁 支持事务 支持异常奔溃后的安…

拓普壹的选品师项目怎么操作更好?

在拓普壹的选品师项目中&#xff0c;成功的关键在于精细化的操作和系统化的策略。这不仅要求选品师具备深厚的自身能力&#xff0c;还需要明智的选择平台和有效利用新技术。本文将从这三个方面探讨如何更好地操作拓普壹选品师项目。 1. 自身能力培养 选品师的核心任务是从众多商…

SPRING07_自动装配如何加强、@Autowired注解debug分析、总结

文章目录 ①. Spring启动一行代码:②. ApplicationContex增强功能③. 自动装配如何装配进来④. Autowired自动注入细节xml版⑤. Autowired注解版分析⑥. 总结一下 ①. Spring启动一行代码: ①. 创建一个IOC容器,传入容器的xml配置文件,Spring在整个创建容器的过程中全部都准备…

Docker安装达梦数据库详细教程

达梦数据库(DM,Dameng Database)是中国自主研发的关系型数据库管理系统。它由武汉达梦数据库有限公司开发,最早可以追溯到1982年,至今已有几十年的发展历史。达梦数据库在中国市场上具有较高的知名度和市场占有率,特别是在政府、金融、电信、能源等行业有广泛的应用。 自…

深度学习——神经网络(neural network)详解(一). 带手算步骤,步骤清晰0基础可看

深度学习——神经网络&#xff08;neural network&#xff09;详解&#xff08;一&#xff09;. 带手算步骤&#xff0c;步骤清晰0基础可看 我将以最简单&#xff0c;基础的形式说明神经网络的训练过程。 搭配以下文章进行学习&#xff1a; 深度学习——卷积神经网络&#xf…

Day18 Linux系统编程学习--文件

文件 (file) 是程序设计中一个重要的概念。所谓“文件”一般指存储在外部介质上数据的集合。C语言把文件看作是一个字符&#xff08;字节&#xff09;的序列&#xff0c;即由一个一个字符&#xff08;字节&#xff09;的数据顺序组成。根据数据的组织形式&#xff0c;可分为 AS…

【森气随笔】python绘图找不同,揭秘不同函数绘图差异。

【森气随笔】python绘图找不同&#xff0c;揭秘不同函数绘图差异。 准备了两组图片&#xff0c;运用了不同绘图函数绘制。然而&#xff0c;令人无语的是&#xff0c;有人竟直言不讳地表示难以察觉其中的差别。非常好奇&#xff0c;是差异太小还是不愿意承认呢&#xff1f;感兴趣…

Linux-服务器硬件及RAID配置实验

系列文章目录 提示&#xff1a;仅用于个人学习&#xff0c;进行查漏补缺使用。 1.Linux介绍、目录结构、文件基本属性、Shell 2.Linux常用命令 3.Linux文件管理 4.Linux 命令安装(rpm、install) 5.Linux账号管理 6.Linux文件/目录权限管理 7.Linux磁盘管理/文件系统 8.Linu…

利用shell脚本一键查询ceph中bucket桶的占用大小

在 Ceph 对象存储中&#xff08;例如使用 RADOS Gateway 提供的 Swift 或 S3 接口&#xff09;&#xff0c;你可能需要了解某个桶&#xff08;bucket&#xff09;的占用大小。 以下是如何在 Ceph 中查看桶的占用大小的方法&#xff1a; 1. 使用 radosgw-admin 工具 radosgw-a…

2024最新整理Python基础知识点汇总(可下载)期末复习必备!

前言 由于篇幅限制&#xff0c;我把所有的Python基础知识点和实战代码全部打包上传至CSDN官方认证的微信上&#xff0c;需要的同学可以自取&#xff01;下载保存在你自己的电脑上&#xff08;保证100%免费&#xff09; 1 变量和简单数据类型 变量命名格式&#xff1a;变量名 …

Linux-Shell管道命令及脚本调试-06

上一章我们讲了一半的管道命令,今天把剩下的讲完 1、管道命令 字符转换命令 tr, col, join, paste, expand 1.1 tr 一种可将字符进行替换、压缩、删除&#xff0c;可以将一组字符转换成另一组字符 格式; tr [-parameter] [string1] [string2] 参数&#xff1a; 参数说…

vs2019 QtConcurrent多线程使用方法

QtConcurrent::run(xxx) 1.打开QT Project Setting-》点击Qt Modules 2.头文件包含&#xff1a; #include <QtConcurrent/QtConcurrent> 3.使用方法&#xff1a; QFuture<void> future1 QtConcurrent::run(this, &auto_pack_line_demo::UpdateVisionComm)…

漏洞复现-Apache Kafka Clients JNDI注入漏洞 (CVE-2023-25194)

1.漏洞描述 Apache Kafka 是一个开源分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型应用程序。 在版本3.3.2及以前&#xff0c;Apache Kafka clients中存在一处JNDI注入漏洞。如果攻击者在连接的时候可以控制属性sasl.jaas.conf…

今是科技携手福瑞莱,共筑环境微生物检测技术创新与发展

近日&#xff0c;成都今是科技有限公司&#xff08;以下简称“今是科技”&#xff09;与福瑞莱环保科技&#xff08;深圳&#xff09;股份有限公司&#xff08;以下简称“福瑞莱”&#xff09;正式宣布达成深度战略合作。此次合作旨在将双方的优势资源与技术力量相结合&#xf…