十一、Vben框架部分组件样式的重新封装

news2024/9/28 23:27:04

在使用vben框架的时候发现部分的样式不符合实际的需求,ant-design-vue的样式也不支持我们的需求,那怎么办呢,只能自己来修改,下面我就改大家说说我遇到的一些修改过的样式和组件。

一、inputNumber带前后标志

先看下目前支持的样式,底下是ant-design-vue支持的样式,当他输入的时候还需要光标方法%后面。$也会被删掉,所以非常难受。

实际需求的样式是这样的

 

开发思路:

  1. 不影响原先的inputNumber组件在封装一个BInputNumber组件
  2. 增加前后两个slot(插槽)prefix, suffix
  3. 将原先的change事件reture出去,方便外部调用

下面直接上代码:

Html部分

<template>
  <div class="b-input-number">
    <InputNumber :style="{'padding-left': prefix.length * 16 + 'px'}"
                 v-bind="getBindValue" @change="handleChange"/>
    <slot name="prefix">
      <span class="number-prefix">{{ prefix }}</span>
    </slot>
    <slot name="suffix">
      <span class="number-suffix">{{ suffix }}</span>
    </slot>
  </div>
</template>

 js部分,change方法采用源码的代码

<script lang="ts">
  import { computed, defineComponent } from 'vue';
  import { InputNumber } from 'ant-design-vue';

  export default defineComponent({
    name: "BInputNumber",
    components: {InputNumber},
    props: {
      prefix: {
        type: String,
        default: ''
      },
      suffix: String,
    },
    emits: ['change', 'update:value'],
    setup(props, {emit, attrs}) {
      const getBindValue = computed((): Recordable => {
        return {
          ...attrs,
          ...props,
        };
      });

      function handleChange() {
        let _len = arguments.length;
        let args = new Array(_len);
        let _key = 0;
        for (; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }

        emit('update:value', args[0]);
        emit('change', ...args);
      }

      return {
        getBindValue,
        handleChange,
      }
    }
  })
</script>

css代码,使其定位到前后两边

<style lang="less">
  .b-input-number {
    display: inline-flex;
    position: relative;
    .ant-input-number-handler-wrap{
      z-index: 1
    }
    .number-prefix {
      position: absolute;
      left: 8px;
      top: 5px;
    }
    .number-suffix {
      position: absolute;
      right: 8px;
      top: 5px;
    }
  }
  .b-input-number[size="small"] {
    .number-prefix {
      top: 2px;
    }
    .number-suffix {
      top: 2px;
    }
  }
</style>

在父组件如何使用呢,如下图

 

二、select组件增加label返回

我们知道在ant-design-vue中select的v-model只能绑定value属性,想获取label还需要写change方法,然后再在其中取值赋值给变量。

那么能不能在有一个属性绑定label,让它也能双向绑定,那么就要改他的源码了。

开发思路:

1、不影响原先的select组件在封装一个BSelect

2、在emits返回时增加一个update:label的参数

3、在change事件中修改label的值,并考虑多选的情况。

下面直接上代码

<template>
  <Select v-bind="getBindValue" @change="handleChange">
    <template #default>
      <slot name="default"></slot>
    </template>
  </Select>
</template>
<script lang="ts">
  import { computed, defineComponent } from 'vue';
  import { Select } from 'ant-design-vue';

  export default defineComponent({
    name: "BSelect",
    components: {Select},
    emits: ['change', 'update:value', 'update:label'],
    setup(props, {emit, attrs}) {
      const getBindValue = computed((): Recordable => {
        return {
          ...attrs,
          ...props,
        };
      });

      function handleChange() {
        let _len = arguments.length;
        let args = new Array(_len);
        let _key = 0;
        for (; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }

        emit('update:value', args[0]);
        if (getBindValue.value.mode === 'multiple') {
          emit('update:label', args[1].map(item => item.title || item.children[0].children));
        } else {
          emit('update:label', args[1] ? (args[1].title || args[1].children[0].children) : '');
        }

        emit('change', ...args);

      }

      return {
        getBindValue,
        handleChange
      }
    }
  })
</script>

 在父组件如何使用呢,如下图

好了,组件封装还有很多,像是table的拖拽功能,upload的自定义封装,下次有机会再和大家分享,大家也可以积极留言沟通。 

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

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

相关文章

命令查看Linux服务器内存、CPU、显卡、硬盘使用情况

命令查看Linux服务器内存、CPU、显卡、硬盘使用情况 查看内存使用情况 使用命令&#xff1a;free -m 大致结果类似下图&#xff1a; 内存占用情况 参数解释&#xff1a; Mem行&#xff08;单位均为M&#xff09;&#xff1a; total&#xff1a;内存总数used&#xff1a;已…

4.4 like通配符关键字过滤查询数据

文章目录1.概述2.LIKE关键字3.百分号&#xff08;%&#xff09;通配符3.1 单个百分号&#xff08;%&#xff09;通配符3.2 多个百分号&#xff08;%&#xff09;通配符3.3 在值的中间使用百分号&#xff08;%&#xff09;通配符3.4 注意事项4.下划线&#xff08;_&#xff09;通…

centos7 配置samba

samba概述&#xff1a; Windows与Linux之间通信的桥梁&#xff0c;Samba是一个非常强大的文件服务器。Samba端口&#xff1a;udp 137 udp138&#xff0c;tcp139 tcp445。Samba工作模式&#xff1a;C/S模式&#xff08;客户端-服务器&#xff09; samba应用环境 1、文件共享&…

python库--urllib

目录 一.urllib导入 二.urllib爬取网页 三.Headers属性 1.使用build_opener()修改报头 2.使用add_header()添加报头 四.超时设置 五.get和post请求 1.get请求 2.post请求 urllib库和request库作用差不多&#xff0c;但比较起来request库更加容易上手&#xff0c;但该了…

SpringCloud学习笔记 - 分布式系统全局事务管理 - Seata1.5.2+Nacos+OpenFeign

1. Seata 是什么? 由于业务和技术的发展&#xff0c;单体应用被拆分成微服务应用&#xff0c;原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源&#xff0c;业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证&#xff0c; 但是全…

【跟着ChatGPT学深度学习】ChatGPT带我学情感分析

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

5G+车联网按下加速键,这家企业已经走在行业前列

进入2023年&#xff0c;5G车联网进入了快速增长阶段&#xff0c;并且正在逐步替代4G的存量市场。 为了更好地满足5G车联网市场的需求&#xff0c;移远通信正式推出了符合3GPP Release 16标准的车规级5G NR模组AG59x系列。据了解&#xff0c;全新的产品在5G传输速度、低时延、高…

SpringBoot addResourceHandlers 代理静态资源无法访问 Java获取linux文件中文名乱码 Linux设置中文字符集

SpringBoot addResourceHandlers 代理静态资源无法访问 Java获取linux文件中文名乱码 linux设置中文字符集Windows中使用SpringBoot addResourceHandlers代理静态资源访问Linux中使用SpringBoot addResourceHandlers代理静态资源访问修改路径问题一度以为Linux不能用这种方式代…

概念解读稳定性保障

什么是稳定百度百科关于稳定的定义&#xff1a;“稳恒固定&#xff1b;没有变动。”很明显这里的“稳定”是相对的&#xff0c;通常会有参照物&#xff0c;例如 A 车和 B 车保持相同速度同方向行驶&#xff0c;达到相对平衡相对稳定的状态。那么软件质量的稳定是指什么呢&#…

区块链对于底层技术的助力和改造,导致了如此多的新技术、新模式的出现

现在&#xff0c;区块链就在经历这样一种状态。是的&#xff0c;我们现在看到的是&#xff0c;以人工智能为代表的诸多新技术的不断地成熟和落地&#xff0c;我们现在看到的是&#xff0c;以元宇宙为代表的诸多新模式的不断衍生和出现。但是&#xff0c;如果深度分析&#xff0…

对称锥规划:锥与对称锥

文章目录对称锥规划&#xff1a;锥与对称锥锥的几何形状常用的指向锥Nonnegative Orthant二阶锥半定锥对称锥对称锥的平方操作对称锥的谱分解对称锥的自身对偶性二阶锥规划SOCP参考文献对称锥规划&#xff1a;锥与对称锥 本文主要讲锥与对称锥的一些基本概念。 基础预备&…

C++回顾(四)—— 类的封装

4.1 面向对象编程介绍 4.1.1 什么是面向对象 面向将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说只有对象内部的代码能够操作对象内部的数据。 4.1.2 面向对象的特点 &#xff08;1&#xff09;抽象的作用 抽象是人们认识事…

【XXL-JOB】XXL-JOB的搭建和使用

【XXL-JOB】XXL-JOB的搭建和使用 文章目录【XXL-JOB】XXL-JOB的搭建和使用1. 任务调度1.1 实现任务调度1.1.1 多线程实现1.1.2 Timer实现1.1.3 ScheduledExecutor实现2. 分布式任务调度2.1 采用分布式的原因3. XXL-JOB3.1 XXL-JOB介绍3.2 执行流程4. 搭建XXL-JOB4.1 创建数据库…

Ep_操作系统面试题-操作系统的分类

答案 单体系统 整个操作系统是以程序集合来编写的&#xff0c;链接在一块形成一个二进制可执行程序&#xff0c;这种系统称为单体系统。 分层系统 每一层都使用下面的层来执行其功能。 微内核 微内核架构的内核只保留最基本的能力&#xff0c;把一些应用放到了用户空间 客户-…

BCN点击试剂1263166-90-0,endo BCN-OH,环丙烷环辛炔羟基

endo BCN-OH基础产品数据&#xff1a;CAS号&#xff1a;1263166-90-0中文名&#xff1a;环丙烷环辛炔甲醇&#xff0c;环丙烷环辛炔羟基英文名&#xff1a;endo BCN-OH 结构式&#xff08;Structural&#xff09;&#xff1a;详细产品数据&#xff1a;Molecular formula&#x…

CVPR 2023 | 基础模型推动语义分割的弱增量学习

前言语义分割的弱增量学习&#xff08;WILSS&#xff09;目的是学习从廉价和广泛可用的图像级标签中分割出新的类别&#xff0c;但图像级别的标签不能提供定位每个片段的细节。为了解决该问题&#xff0c;本文提出了一个新颖且数据高效的框架&#xff08;FMWISS&#xff09;。该…

IM即时通讯开发实时消息的“时序性”与“一致性”

我们都知道&#xff0c;一个典型的分布式系统中&#xff0c;很多业务场景都需要考虑消息投递的时序&#xff0c;例如&#xff1a;IM中单聊消息投递&#xff1a;保证发送方发送顺序与接收方展现顺序一致&#xff1b;IM中群聊消息投递&#xff1a;保证所有接收方展现顺序一致&…

如何审计一个智能合约

智能合约审计用于整个 DeFi 生态系统&#xff0c;通过对协议代码的深入审查&#xff0c;可以帮助解决识别错误、低效代码以及这些问题。智能合约具有不可篡改的特点&#xff0c;这使得审计成为任何区块链项目安全流程的关键部分。 代码审计对任何应用程序都很重要&#xff0c;…

【ES】Elasticsearch核心基础概念:文档与索引

es的核心概念主要是&#xff1a;index(索引)、Document(文档)、Clusters(集群)、Node(节点)与实例&#xff0c;下面我们先来了解一下Document与Index。 RESTful APIs 在讲解Document与Index概念之前&#xff0c;我们先来了解一下RESTful APIs&#xff0c;因为下面讲解Documen…

Antd Form校验没有效果的问题

问题是这样的&#xff1a; 环境&#xff1a; antd4.x 现象&#xff1a; 如上页面 出现页面后直接点击按钮触发校验&#xff0c;不会有校验提示&#xff0c;页面没有任何反应假如只有其中任何一个&#xff0c;校验正常 比如&#xff0c;没有“模型编码”&#xff0c;只有“模…