【Vue】组件封装小技巧 — 利用$attrs和v-bind接收传递未定义的属性

使用介绍

在Vue.js中,$attrsv-bind可以用于组件的二次封装,以在封装的组件中传递父组件的属性和事件。这对于创建高度可定制的通用组件非常有用。

下面是一些示例代码:

假设你有一个名为MyButton的自定义按钮组件,它接受一些常见的按钮属性(如disabledtype等),然后你想将其二次封装,以添加一些额外的样式和功能。以下是如何使用$attrs和v-bind来实现这个目标的示例:

<template><buttonclass="my-custom-button"  <!-- 添加自定义样式 -->v-bind="$attrs"  <!-- 将父组件传递的属性绑定到这个按钮 -->:class="{ 'my-special-class': special }"  <!-- 添加额外的类名 -->@click="handleClick"  <!-- 添加点击事件处理函数 -->><slot></slot>  <!-- 保留插槽内容 --></button>
</template><script>
export default {props: {special: Boolean,},methods: {handleClick() {// 处理点击事件this.$emit('click');},},
};
</script>

在这个示例中,MyButton组件接受一个名为special的属性,这个属性用于指定是否要添加额外的特殊样式。$attrs用于将所有未明确声明的父组件传递的属性绑定到按钮元素上。然后,我们使用:class来添加额外的类名,使用@click来添加点击事件处理函数,同时保留插槽内容以确保父组件可以插入任何需要的内容。

在父组件中,你可以像使用普通按钮一样使用MyButton组件,并将需要的属性和事件传递给它:

<template><div><MyButtondisabled="true"type="submit"special="true"@click="handleSpecialClick">Click me</MyButton></div>
</template><script>
import MyButton from './MyButton.vue';export default {components: {MyButton,},methods: {handleSpecialClick() {// 处理特殊按钮的点击事件},},
};
</script>

通过这种方式,你可以将MyButton组件进行二次封装,以添加额外的功能和样式,同时仍然能够从父组件传递属性和事件。这种方法可以创建更加灵活和可定制的组件,适应不同的需求。

需要注意!!!

如果不设置 inheritAttrs: false,则属性如下所示
在这里插入图片描述
而设置 inheritAttrs: false可以来避免这种行为,这样后将不继承未明确声明的属性。clearable属性也就不见了。
在这里插入图片描述

使用案例

组件二次封装,修改 elementUI 的样式:

<template><el-date-picker v-model="innerVal" v-bind="$attrs"></el-date-picker>
</template>
<script>
export default {name: 'myDatePicker',components: {},props: {},inheritAttrs: false,  // 不继承未明确声明的属性data () {return {innerVal: this.$attrs.value //这里获取 v-model 内容}},methods: {},created () { },mounted () { }
}
</script>
<style lang="less" scoped>
/deep/.el-input__inner {background: #071e52;border: 2px solid #36a6f1;border-radius: 2px;color: #fff;cursor: pointer;height: inherit;
}
/deep/.el-input__icon {line-height: 27px;
}
</style>

具体使用:

<!-- 这里的selectDate也就是组件中所写的 this.value -->
<my-date-picker v-model="selectDate" type="date" placeholder="选择日期"style="margin-left: 15px;height: 27px;" :clearable="false">
</my-date-picker>

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

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

相关文章

CCF ChinaSoft 2023 论坛巡礼 | NASAC青年软件创新奖论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

公司文件怎么加密

在当今数字化时代&#xff0c;保护企业文件的安全性变得尤为重要。文件加密是一种有效的安全措施&#xff0c;可以防止未经授权的访问和数据泄露。本文将介绍企业文件加密的重要性&#xff0c;并特别推荐金稻壳安全狗作为可靠的加密软件。 企业文件加密的重要性 企业文件包含了…

ICCV 2023|PViC:构建交互谓词视觉上下文,高效提升HOI Transformer检测性能

文章链接&#xff1a;https://arxiv.org/abs/2308.06202 代码仓库&#xff1a;https://github.com/fredzzhang/pvic 在今年的计算机视觉顶会上&#xff0c;基于视觉Transformer&#xff08;ViT&#xff09;的工作仍然占有非常重要的地位。目前最受研究者青睐的&#xff0c;莫过…

python web框架 flask基础入门教程

python web框架 flask基础入门教程 今天我们写一个flask基础入门教程&#xff0c;当然也会覆盖很多重要的知识点&#xff0c;在这篇博客中&#xff0c;我们主要会讲解如下内容&#xff1a; 1、通过flask框架向web传输和接收参数 2、实现静态图片插入和图书上传 3、实现搭建…

多测师肖sir_高级金牌讲师_jenkins搭建

jenkins操作手册 一、jenkins介绍 1、持续集成&#xff08;CI&#xff09; Continuous integration 持续集成 团队开发成员每天都有集成他们的工作&#xff0c;通过每个成员每天至少集成一次&#xff0c;也就意味着一天有可 能多次集成。在工作中我们引入持续集成&#xff0c;通…

在Flask中实现文件上传七牛云中并下载

在Flask中实现文件上传和七牛云集成 文件上传是Web应用中常见的功能之一&#xff0c;而七牛云则提供了强大的云存储服务&#xff0c;使得文件存储和管理变得更加便捷。在本篇博客中&#xff0c;我们将学习如何在Flask应用中实现文件上传&#xff0c;并将上传的文件保存到七牛云…

Mysql数据库 8.SQL语言 外键约束

一、外键约束 外键约束——将一个列添加外键约束与另一张表的主键&#xff08;唯一列&#xff09;进行关联之后&#xff0c;这个外键约束的列添加的数据必须要在关联的主键字段中存在 案例 创建原则&#xff1a;先创建不含外键的表也就是班级表 添加外键的方式 一般使用第一…

社区分享|杭银消费金融基于MeterSphere开展接口自动化测试

杭银消费金融有限公司&#xff08;以下简称“杭银消费金融”&#xff09;成立于2015年12月&#xff0c;是经中国银保监会批准&#xff0c;由杭州银行作为主发起人&#xff0c;联合滴滴出行、中国银泰等企业组建的持牌消费金融机构&#xff0c;注册资本为25.61亿元。杭银消费金融…

【HarmonyOS】HarmonyOS Test测试用例中一些断言API的使用

【关键词】 单元测试框架、HarmonyOS Test、assertThrowError、assertFail、assertEqual 【测试代码及测试结果展示】 这里以新建API9工程自动生成的ohosTest来编写单元测试代码。 1、 测试代码&#xff1a; import { describe, it, expect } from ohos/hypium import abil…

JUC并发编程(5)(自定义线程池 + 共享模型之工具2)

JUC并发编程(5)&#xff08;自定义线程池 共享模型之工具2&#xff09; 笔记内容来源于黑马程序员教学视频 一、共享模型之工具2 ①&#xff1a;读写锁 1、ReentrantReadWriteLock 当读操作远远高于写操作时&#xff0c;这时候使用读写锁让读-读可以并发&#xff0c;提高性…

Tomcat的类加载器

详情可以参考&#xff1a;https://tomcat.apache.org/tomcat-10.1-doc/class-loader-howto.html 简要说明 Tomcat安装了多种类加载器&#xff0c;以便容器的不同部分、容器中的应用访问能够不同的类和资源。 在Java环境中&#xff0c;类加载器被组织为父-子树的形式。通常情况…

发电机综合特性测试仪

发电机综合特性测试仪是可以测量发电机的电压、电流、功率因数、频率等参数&#xff0c;以评估发电机的质量和性能。可以测量发电机的输出电压&#xff0c;以确保其符合规定的标准和要求。测量发电机的输出电流&#xff0c;以确定其负载能力和稳定性。可以测量发电机的功率因数…