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

news2024/11/24 12:22:16

使用介绍

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

下面是一些示例代码:

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

<template>
  <button
    class="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>
    <MyButton
      disabled="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.coloradmin.cn/o/1184105.html

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

相关文章

Apipost发起请求,能正确返回,日志却打印java.io.EOFException: null 的原因

http响应头首部Content-Length - 程序员大本营 http响应头首部Content-Length HTTP Content-Length深入实践-CSDN博客 用了这么久HTTP, 你是否了解Content-Length?-CSDN博客 具体分析可看上面参考文章。 解决办法&#xff1a;可在请求头加上Content-Length&#xff0c;准确…

linux服务器添置一块新硬盘操作

之前有一台ubuntu服务器&#xff0c;考虑未来存储容量可能不够&#xff0c;添加了一块新的硬盘&#xff0c;这是本次添置硬盘过程。 首次接上硬盘&#xff0c;提示&#xff1a; 没有找到新接入设备&#xff0c;查看接线&#xff0c;主板有个硬盘接线端子坏了&#xff0c;更换一…

机器视觉opencv答题卡识别系统 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 答题卡识别系统 - opencv python 图像识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分…

新翔绩效考核系统

介绍&#xff1a; 新翔绩效考核系统&#xff0c;是新翔软件有限公司整合众多企事业单位绩效考核需求&#xff0c;而开发的网络版绩效管理软件。软件分前台手机端评分页面和后台电脑端管理页面&#xff0c;可实现360度绩效考核、KPI考核等模式考核&#xff0c;评分方式多样、设…

计算机毕设 基于情感分析的网络舆情热点分析系统

文章目录 0 前言1 课题背景2 数据处理3 文本情感分析3.1 情感分析-词库搭建3.2 文本情感分析实现3.3 建立情感倾向性分析模型 4 数据可视化工具4.1 django框架介绍4.2 ECharts 5 Django使用echarts进行可视化展示5.1 修改setting.py连接mysql数据库5.2 导入数据5.3 使用echarts…

【网络面试必问(6)】IP协议对网络包的转发

接上一篇&#xff1a;【网络面试必问&#xff08;5&#xff09;】网络收发数据及断开服务器&#xff08;四次挥手&#xff09; 在之前的博客中&#xff0c;我们提到过&#xff0c;网络传输的报文是有真实的数据包和一些头部组成的&#xff0c;目前我们了解的头部就有TCP头、IP头…

VueUse、View Transitions API实现暗黑模式主题动画切换效果

VueUse、View Transitions API实现暗黑模式主题动画切换效果 前言View Transitions API兼容版本 VueUse 正题效果安装代码 作者GitHub&#xff1a;https://github.com/gitboyzcf 有兴趣可关注&#xff01;&#xff01; 前言 View Transitions API View Transitions API 是原生…

华东理工大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;20金币 获取条件&#xff1a;提交华东理工大学任意中危或以上级别漏洞 证书规格&#xff1a;附送图二实物及封皮

[ Linux Busybox ] nandwrite 命令解析

文章目录 相关结构体nandwrite 函数实现nandwrite 实现流程图 文件路径&#xff1a;busybox-1.20.2/miscutils/nandwrite.c 相关结构体 MTD 相关信息结构体 struct mtd_info_user {__u8 type; // MTD 设备类型__u32 flags; // MTD设备属性标志__u32…

【Proteus仿真】【STM32单片机】水质监测报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能&#xff1a; 系统运行后&a…

汽车标定技术(七)--基于模型开发如何生成完整的A2L文件(2)

目录 1. 自定义ASAP2文件 2. asap2userlib.tlc需要修改的部分 3. 标定量观测量地址替换 3.1 由elf文件替换 3.2 由map文件替换 3.3 正则表达式&#xff08;含asap2post.m修改方法&#xff09; 4.小结 书接上文汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)-C…

考研408-计算机网络 第二章-物理层学习笔记及习题

第二章 物理层 一 通信基础 1.1 物理层基本概念 1.1.1 认识物理层 物理层目的&#xff1a;解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是具体的传输媒体。 物理层主要任务&#xff1a;确认与传输媒体接口有关的一些特性&#xff0c;需要进行定义标…

Kafka(消息队列)--简介

1、kafka&#xff1a; 是一个高吞吐的分布式消息系统&#xff0c;与Hdfs比较相似&#xff0c;但是与hdfs的区别是在于hdfs是存储的是历史的、海量的数据&#xff0c;然而kafka存储的是实时的、最新的数据。 2、消息队列&#xff1a; 指的是在Kafka中的数据队列。可以存放数据在…

华为数通方向HCIP-DataCom H12-831题库(多选题:141-160)

第141题 项目实施方案主要包含哪些项? A、风险控制措施 B、人员安排 C、时间规划 D、割接流程 答案:ABCD 解析: 项目实施方案主要包括:时间规划、人员安排、割接流程、风险控制措施。 第142题 以下哪些广域网链路属于报文交换网? A、PSIN B、ISDN C、X.25 D、ATM E、MSTP…

大语言模型(LLM)综述(六):大型语言模型的基准和评估

A Survey of Large Language Models 前言7 CAPACITY AND EVALUATION7.1 基本能力7.1.1 语言生成7.1.2 知识利用7.1.3 复杂推理 7.2 高级能力7.2.1 人类对齐7.2.2 与外部环境的交互7.2.3 工具操作 7.3 基准和评估方法7.3.1 综合评价基准7.3.2 评估方法 7.4 实证评估7.4.1 实验设…

数字化工厂的实施挑战与解决方法

随着科技的快速发展&#xff0c;数字化工厂成为现代制造业的重要趋势之一。数字化工厂通过整合信息技术和制造技术&#xff0c;可以提高生产效率、降低成本、优化资源利用&#xff0c;同时也给企业带来了更多的挑战。 1. 技术挑战 数字化工厂实施过程中最大的挑战之一是技术方…

运动耳机怎么选?精选五款优秀的运动耳机分享

​对于喜欢运动的我来说&#xff0c;不管是在室内健身&#xff0c;还是在户外跑步&#xff0c;我都会边运动边听歌&#xff0c;运动耳机里放着自己喜欢的音乐会很放松。然而&#xff0c;市面上的运动耳机品牌和型号众多&#xff0c;质量参差不齐。今天&#xff0c;我们就为大家…

ZKP8.2 FRI (Univariate) Polynomial Commitment

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 8: FRI-based Polynomial Commitments and Fiat-Shamir (Justin Thaler) 8.2 FRI (Univariate) Polynomial Commitment Recall: Univariate Polynomial Commitments Initial Attempt from Lecture 4 (Merkle Tree) Fixing…

AI智能助理源码系统+智能创作 带完整搭建教程

大家好啊&#xff0c;罗峰今天来给大家介绍一款AI智能助理源码系统。 以下是部分核心功能实现代码模块 系统特色功能一览&#xff1a; 高效便捷&#xff1a;AI智能助理能够帮助用户完成各种任务&#xff0c;无论是写作、论文、代码、小说、创意策划&#xff0c;还是Excel表格…

【Node.js入门】1.1Node.js 简介

Node.js入门之—1.1Node.js 简介 文章目录 Node.js入门之—1.1Node.js 简介什么是 Node.js错误说法 Node.js 的特点跨平台三方类库自带http服务器非阻塞I/O事件驱动单线程 Node.js 的应用场合适合用Node.js的场合不适合用Node.js的场合弥补Node.js不足的解决方案 什么是 Node.j…