前言:

今年这大半年我主要负责公司的后台教务管理的开发,这个管理系统目前主要是给公司的内部人员去配置公司的核心项目(例如:熊猫小课)的所有数据,例如课程的配置、课程期数的配置、课程版本的配置、活动的配置、课程安排表、管理员的权限配置、物流的管理、退款管理、学员咨询管理等功能。因为一开始这个教务系统的原型设计就是基于element-ui 1.4.13的版本设计的,前端一开始为了和设计稿给的原型保持一致,项目中也是基于element-ui 1.4.13在开发,现在这个版本官方已经停止维护了,我们曾经尝试过去升级element-ui到最新版本,但是发现升级后的版本和旧版本的样式有些模块改动太大,微调的成本太高,最终放弃了升级。所以后续基于后台管理element-ui部分的总结,我都是基于的element-ui 1.4.13的总结。

需要实现的效果:

选中时就显示复选框,不选中时不显示复选框

element-ui中提供的多选ui组件:

不符合我们的需求,所以我们需要想办法自己封装,但如何做呢?

element-ui中提供的其他组件:

我们可不可以将element-ui中提供的tag组件、复选框组件和普通的下拉框组件组合呢?因为这三个组合起来正是我们想要的效果。

select组件中我们可以自定义下拉框中的数据展示的样式:

如何组合呢?

 <el-select class="dropdown-list" v-model="selectedValue" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.plan_id"
:class="{active: isActive(item)}"
:label="item.plan_name"
:value="item.plan_id">
<el-checkbox
v-if="isActive(item)"
:label="item.plan_name"
:disabled="isActive(item)"
:checked="isActive(item)"
@change="valueChange(item)">
</el-checkbox>
<div v-else v-text="item.plan_name" @click="selectItem(item)"></div>
</el-option>
</el-select>

明白可以怎么做就发现很简单了,就是重写el-option组件,将下拉框中默认的样式用自定义的样式覆盖掉,el-option组件中下拉框的样式是定义在一个slot的插槽中的,我们在slot中定义我们自己的ui布局。

这个组件我们只需要从外部拿两个变量值:下拉框的选项、和被选择的选项值。


<el-tag
class="el-tag"
v-for="tag in selectedList"
:key="tag.name"
:closable="true"
:type="tag.type"
:class="getStressStyle(tag)"
@close="showDelTipDialog(tag)">
<!-- {{htmlToText(tag.name)}} -->
<span v-html="tag.name"> </span>
</el-tag>
<div class="dropdown-wrap">
<el-select class="dropdown-list" v-model="selectedValue" placeholder="选择开学课程期数">
<el-option
v-for="item in options"
:key="item.plan_id"
:class="{active: isActive(item)}"
:label="item.plan_name"
:value="item.plan_id">
<el-checkbox
v-if="isActive(item)"
:label="item.plan_name"
:disabled="isActive(item)"
:checked="isActive(item)"
@change="valueChange(item)">
</el-checkbox>
<div v-else v-text="item.plan_name" @click="selectItem(item)"></div>
</el-option>
</el-select>
</div>

总结:写完之后就发现还是很简单的,记得当时写的时候都没有思路,仔细想想,质疑一下element-ui的选择框的下拉可以自定义样式吗,然后去仔细看官方文档,发现确实可以做到,思路就打开了。先想应该怎么做,先假设,再去验证,这样才能快速得到结果。

基于element-ui的多选下拉框和tag标签的二次封装的更多相关文章

  1. Element UI系列:Select下拉框实现默认选择

    实现的主要关键点在于 v-mode 所绑定的值,必须是 options 数组中对应的 value 值

  2. query多选下拉框插件 jquery-multiselect(修改)

    其实网上关于该控件的使用教程已经很多了,其中 query多选下拉框插件 jquery-multiselect Jquery多选下拉列表插件jquery multiselect功能介绍及使用 这2个的介 ...

  3. js:jquery multiSelect 多选下拉框实例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Easyui-Combobox多选下拉框

    因为工作需要,引入combobox多选下拉框,并且获取选择的值并以","分开. 效果如下: 代码如下: <html> <head> <title> ...

  5. Extjs4.2 多选下拉框

    //多选下拉框 Ext.define('MDM.view.custom.MultiComboBox', { extend: 'Ext.form.ComboBox', alias: 'widget.mu ...

  6. DropDownList单选与多选下拉框

    一.单选DropDownList传值 1.添加界面的DropDownList显示值问题 (1)在方法内添加ViewData的方法: var ad = new UnitsRepository(); Vi ...

  7. pentaho cde 自定义复选下拉框 checkbox select

    pentaho  自带的component 虽多,但是当用户需要在一个表格中查看多个组别的数据时,pentaho自带的单选框就不能实现了,所以复选下拉框势在必行,实现效果如下: 实现原理是借用了jqu ...

  8. Bootstrap3级联多选下拉框

    <!DOCTYPE html> <html> <head> <title>Bootstrap3级联多选下拉框</title> <met ...

  9. js怎么能取得多选下拉框选中的多个值?

    方法:获取多选下拉框对象数组→循环判断option选项的selected属性(true为选中,false为未选中)→使用value属性取出选中项的值.实例演示如下: 1.HTML结构 1 2 3 4 ...

随机推荐

  1. Sonar理论篇

    一.Sonar是什么    Sonar是一个代码质量管理的开源平台,用于管理源代码的质量,通过插件形式,可以支持包括java.C#.JavaScript等二十余种编程语言的代码质量管理与检测. Son ...

  2. Install Java on Ubuntu server

    准备工作 a) 获得超级用户权限 关于超级用户访问权限的说明: 要将 Java 安装在系统级位置(例如 /usr/java),则必须以超级用户身份登录,从而获得必要的权限.如果您不具有超级用户访问权限 ...

  3. C++学习(三十二)(C语言部分)之 栈

    栈测试代码笔记如下: #include<stdio.h> #include<string.h> #include <stdlib.h> #define SIZE 1 ...

  4. 芯灵思SINA33开发板怎样创建编译环境

    首先在Vmware安装好Centos,在此不再重复步骤,大家可以看以前的帖子有详细的步骤.本节主要介绍如何在Centos 搭建编译环境 Step 1 更新 CentOS 源 CentOS 由于很追求稳 ...

  5. 配置java环境变量【搭建java开发环境】【Path追加字符串,CLASSPATH填入固定的字符串】

    准备工作:把jdk压缩包解压出来 jdk的安装目录就是F:\a-bao\jdk1.8.0_65 第一步: 变量名:JAVA_HOME变量值:JDK安装路径 直接追加这些字符串 %JAVA_HOME%\ ...

  6. Java(控制台输出)实现猜数字小游戏

    import java.util.Scanner; import java.util.Random; public class GuestNum{ public static void main(St ...

  7. MFC message routine

    现在维护的一个软件还是用mfc写的,最近被要加入一个功能弄得焦头烂额.主要现象就是加入的菜单的响应函数没被call到 上网搜索,在官方网站找到了不少资料 主要链接如下 https://msdn.mic ...

  8. linux之 修改磁盘调度算法

    IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯. (elevator)而相应的算法也就被叫做电梯算法.而Li ...

  9. 使用 localeCompare 函数对中文进行排序

    localeCompare 函数可对中文进行排序. 性能相关 当比较大量字符串时, 比如比较大量数组时, 最好创建一个Intl.Collator 对象并使用compare 属性所提供的函数. mdn介 ...

  10. bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2553 看了题解才会…… 首先,给定一个串,最好的划分方式是按禁忌串出现的右端点排序,遇到能填 ...