【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.mzph.cn/news/136719.shtml

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

相关文章

pdf.js不分页渲染(渲染完整内容)

直接上代码 首先引入pdf.js 和 pdf.worker.js // 渲染pdf const pdfUrl test1.pdf, _targetDom pdf-container;pdfjsLib.getDocument(pdfUrl).promise.then(async doc > {let _i 0;for (let item of new Array(doc.numPages).fill()) {await renderOtherPage(doc, _i, _t…

K8S概念与架构

K8S概念与架构 一、Kubernetes 概述1、K8S 是什么2、为什么要用 K8S3、k8s介绍二、Kubernetes 集群架构与组件2.1、Master核心组件 2.2、Node核心组件 三、Kubernetes 核心概念3.1、Pod 控制器 一、Kubernetes 概述 1、K8S 是什么 K8S 的全称为 Kubernetes (K12345678S)&…

nginx https 如何将部分路径转移到 http

nginx https 如何将部分路径转移到 http 我有一个自己的网站&#xff0c;默认是走的 https&#xff0c;其中有一个路径需要走 http。 实现 在 nginx 的配置文件 https 中添加这个路径&#xff0c;并添加一个 rewrite 的指令。 比如我需要将 tools/iphone 的路径转成 http&am…

Postgresql数据类型-时间类型

PostgreSQL对时间、日期数据类型的支持丰富而灵活&#xff0c;本节介绍PostgreSQL支持的时间、日期类型&#xff0c;及其操作符和常用函数。 PostgreSQL支持的时间、日期类型如表所示。 我们通过一个简单的例子理解这几个时间、日期数据类型&#xff0c;先来看看系统自带的now…

70 内网安全-域横向内网漫游Socks代理隧道技术

目录 必要基础知识点:1.内外网简单知识2.内网1和内网2通信问题3.正向反向协议通信连接问题4.内网穿透代理隧道技术说明 演示案例:内网穿透Ngrok测试演示-两个内网通讯上线内网穿透Frp自建跳板测试-两个内网通讯上线CFS三层内网漫游安全测试演练-某CTF线下2019 涉及资源: 主要说…

深入分析MySQL索引与磁盘读取原理

索引 索引是对数据库表中一列或者多列数据检索时&#xff0c;为了加速查询而创建的一种结构。可以在建表的时候创建&#xff0c;也可以在后期添加。 USER表中有100万条数据&#xff0c;现在要执行一个查询"SELECT * FROM USER where ID999999"&#xff0c;如果没有索…

挑战100天 AI In LeetCode Day05(热题+面试经典150题)

挑战100天 AI In LeetCode Day05&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-72.1 题目2.2 题解 三、面试经典 150 题-73.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&am…

2023年腾讯云双11活动入口在哪里?

2023年双11腾讯云推出了11.11大促优惠活动&#xff0c;下面给大家分享腾讯云双11活动入口、活动时间、活动详情&#xff0c;希望可以助力大家轻松上云&#xff01; 一、腾讯云双11活动入口 活动地址&#xff1a;点此直达 二、腾讯云双11活动时间 腾讯云双11活动时间跨度很长…

97 只出现一次的数字

只出现一次的数字 题解1 异或的应用&#xff08;判断出现次数是奇偶&#xff09; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题…

【MySQL数据库】| 索引以及背后的数据结构

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;MySQL数据库 &#x1f397;️ 如何优雅的活着&#xff0c;是我找寻的方向 目录 1. 基本知识2. 索引背后的数据结构总结 1. 基本知识 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有…

已解决:Python Error: IndentationError: expected an indented block 问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

19 数据中心详解

1、数据中心的概念 其实平时我们不管是看新闻&#xff0c;视频&#xff0c;下载文件等&#xff0c;最终访问的目的地都是在数据中心里面。数据中心存放的是服务器&#xff0c;区别于我们平时使用的笔记本或者台式机。 机架&#xff1a;数据中心的服务器被放在一个个叫作机架&…

代码随想录算法训练营第四十六天|139. 单词拆分、多重背包问题、总结

第九章 动态规划part08 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 关于字符串类型的题目还是…

NVM安装使用

文章目录 简要说明下载nvm安装nvm使用说明使用nvm下载各个版本的node.js查看已经下载到本地的node有哪些切换到对应的node版本后 简要说明 当我们在项目开发时&#xff0c;我们接手别人的项目、是当时开发的项目使用的node版、找开源项目学习的时候开源项目要求的node版本。和…

Count-based exploration with neural density models论文笔记

Count-based exploration with neural density models[J]. International Conference on Machine Learning,International Conference on Machine Learning, 2017. 基于计数的神经密度模型探索 0、问题 这篇文章的关键在于弄懂pseudo-count的概念&#xff0c;以及是如何运用…

springboot,spring框架返回204 status code的时候,会吞掉返回值

背景 发现有个有意思的现象&#xff0c;就是当你的接口返回204的 HTTP status code 的时候&#xff0c;会自动把 response body 吃掉&#xff0c;即使代码里是有返回的。例如 &#xff08;其实204本身就是NO_CONTENT的意思&#xff0c;不过我是真没想到真干掉了返回&#xff0…

数据库系统概念系列 - 数据库系统的历史

从商业计算机的出现开始&#xff0c;数据处理就一直推动着计算机的发展。事实上&#xff0c;数据处理自动化早于计算机的出现。Herman Hollerith 发明的穿孔卡片&#xff0c;早在20世纪初就用来记录美国的人口普查数据&#xff0c;并且用机械系统来处理这些卡片和列出结果。穿孔…

Kotlin HashMap entries.filter过滤forEach

Kotlin HashMap entries.filter过滤forEach fun main(args: Array<String>) {val hashMap HashMap<String, Int>()hashMap["a"] 1hashMap["b"] 2hashMap["c"] 3println(hashMap)hashMap.entries.filter {println("filter $…

GDPU 数据结构 天码行空9

实验九 哈夫曼编码 一、【实验目的】 1、理解哈夫曼树的基本概念 2、掌握哈夫曼树的构造及数据结构设计 3、掌握哈夫曼编码问题设计和实现 二、【实验内容】 1、假设用于通信的电文仅由8个字母 {a, b, c, d, e, f, g, h} 构成&#xff0c;它们在电文中出现的概率分别为{ 0.…

酷安官网下载页前端自适应源码

酷安官网下载页前端自适应源码&#xff0c;自己拿走玩玩 站长只打开看了一眼&#xff0c;感觉风格还不错&#xff0c;纯html&#xff0c;自己魔改 转载自 https://www.qnziyw.cn/wysc/qdmb/24470.html