开始正文之前,有必要先说自己实现这个组件的必要性描述。

  话说大家做表格时,增删查改按钮都是放在哪里的?最简单的方式应该是这样:

是不是感觉奇丑无比啊,于是改成了这样:

但是这种操作按钮一多后就没位置放了,于是继续改成这种:

  然而我老大认为这种按钮一多依然不太好看。。。

  那还有什么办法呢?陷入沉思。

  先说说我的做法,我的做法是这样的:

  我的想法是常用高频的操作双击行弹窗Modal,所有操作按钮都不放表格里,全放表格上方的右侧,点击想操作的行,会高亮那一行,然后点击上方的操作按钮即可,这样有个需要注意的是,每行不能过高,过长的内容得用ellipsis: true来省略显示,并且最好每页只展示10行,这样可以保证不管想操作哪一行,都在同一个界面操作,不需要滑动滚动条。这样虽然看起来完美解决了行内放操作按钮太多不好看的问题,但我老大显然不这样认为,他觉得双击编辑这个用户不一定会知道,这样就得放个提示信息,但他又不想提示,而且点击行,再点击上方操作按钮,比较麻烦。。。?

  于是我试着提一个建议,就是还是双击行进入编辑弹窗,然后每行右侧放个下拉菜单,就像这样:

  然而老大还是不满意,他说他想要的是element里的DropDown,那个下拉菜单有个split-button功能,就是可以下拉菜单的左边是个按钮,有按钮独自的点击事件,右侧才是下拉菜单。可是iView里的DropDown没有这种东西,于是我去iView那里提了个功能建议issure

  可是我发现虽然标记成了may be supported in the future,然而要等iView大佬上线这个估计要等到黄花菜都凉了。所以我决定自己动手丰衣足食。

  大概看了下element的实现,其实就是分离成两个按钮,左边的按钮可以点击,右边的按钮给下拉菜单用,然后把这两个按钮凑在一起就搞定了。实现起来其实不难,代码也不长,我直接贴出来了:

<template>
<span>
<Button :type="type" @click="$emit('click')" :size="size" :icon="icon" class="btnLeft">
<slot></slot>
</Button>
<Dropdown @on-click="command" :trigger="trigger">
<Button :type="type" icon="ios-arrow-down" :size="size" class="btnDown"/>
<template slot="list">
<slot name="list"></slot>
</template>
</Dropdown>
</span>
</template> <script>
export default {
props: {
/**
* @description 按钮类型,可选值为 default、primary、dashed、text、info、success、warning、error
*/
type: {
type: String,
default: "primary"
},
/**
* @description 按钮大小,可选值为large、small、default或者不设置
*/
size: String,
/**
* @description 触发方式,可选值为 hover(悬停)click(点击)contextMenu(右键),默认是hover
*/
trigger: String,
/**
* @description 设置按钮的图标类型
*/
icon: String
},
methods: {
command: function(key) {
this.$emit("command", key);
}
}
};
</script>
<style>
.btnDown {
margin-left: 0 !important;
padding-left: 5px !important;
padding-right: 5px !important;
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
.btnLeft {
margin-right: 0 !important;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
</style>

  使用时直接import这个组件,然后用法也和原来的DropDown差不多:

      <ButtonDrop @command="setStatus" @click="setPage(1)" size="large" icon="md-create">
编辑
<DropdownMenu v-once slot="list">
<DropdownItem :name="-1">全部</DropdownItem>
<DropdownItem v-for="t in statuss" :key="t.k" :name="t.k">{{t.v}}</DropdownItem>
</DropdownMenu>
</ButtonDrop>

  最终的效果就是这样:

  然后把这个用render放到表格的每一行的右侧即可。

  其实这个组件也是比较简单的,重要的是这里面的思路历程。

what?iView的DropDown没有element的split-button?提issure?等不及了,自己实现一个的更多相关文章

  1. MFC控件(7):Split Button

    VS2008中可以看到MFC有一个叫Split Button的控件,要想看它的效果,瞧下QQ那聊天窗口的"发送", "消息记录"这两个按钮就知道了.实际上就是还 ...

  2. jQuery 分割按钮(Split Button)

    代码写多了,有些使用过的方法和技巧会一时半会想不起来,平日记录下来,方便自己和有需要的人日后查阅. <html> <head> <style type="tex ...

  3. element中使用button会刷新一遍页面

     会刷新:   <el-form-item> <button @click="register('form')" class="submitBtn&qu ...

  4. Bootstrap源码分析之dropdown

    源码分析: Dropdowns.scss:下拉框模块 Javascripts/bootstrap/dropdown.js:实现下拉框响应 实现功能及原理: 下拉选项卡,默认不能实现显示选中项的功能 原 ...

  5. Bootstrap Dropdown 源码分析

    /* ======================================================================== * Bootstrap: dropdown.js ...

  6. amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown

    amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown 一.总结 1.am-dropdown(及其孩子):控制下拉列表的样式 2.data-am-dropdown(及其孩子):控 ...

  7. iview 踩坑之旅

    公司重构管理系统,框架定了vue,UI在element和iview之间选,element样式被吐槽丑,于是选了iview,但是,,这个坑多啊... 废话少说,罗列了iview中容易出错或者懵逼的一些地 ...

  8. 【技术博客】使用iview的Tree组件写一棵文件树

    本次项目的前端部分使用vue框架+iview组件构建,其中IDE的文件树部分使用了iview的Tree组件,但是Tree组件本身的接口功能极其有限,网上的相关资料也不多,在使用时费了一番功夫才摸索清楚 ...

  9. Vue前端框架基础+Element的使用

    前置内容: AJAX基础+Axios快速入门+JSON使用 目录 1.VUE 1.1 概述 1.2 快速入门 1.3 Vue指令 1.3.1 v-bind & v-model 指令 1.3.2 ...

随机推荐

  1. BZOJ 5118

    矩阵乘也是可以欧拉定理的HHH 所以幂次就是$(2^n-1) ~ mod ~ \varphi(p)$就好了 const ll p=1125899839733759ll; inline ll mu(ll ...

  2. Java Web 禁用Cookie对Session的影响

    如果客户端禁用了Cookie,那么服务端就不能得到Session了.因为通过Session ID来确定当前会话对应的服务端Session,而Session ID通过Cookie来传递,所以禁用Cook ...

  3. springboot集成springsession利用redis来实现session共享

    转:https://www.cnblogs.com/mengmeng89012/p/5519698.html 这次带来的是spring boot + redis 实现session共享的教程. 在sp ...

  4. __x__(40)0909第五天__表格 table 的 css 样式 美化

    如果就向下面的代码那样,不写 tbody , 则浏览器自添加 tbody , 并将所有的 tr 移入 tbody 意味着 tr 并非 table 的子元素,而是 tbody 的子元素. 所以 以后编写 ...

  5. ubuntu重复登录问题

    第一次遇到: 昨天好不容易装好了驱动,紧接着装了CUDA,cuDNN,Anaconda,VSCode等等.然后安装pytorch的时候遇到了下载的问题,后来也算搞定了.但是在更换了显示器后重启(好像是 ...

  6. php正则表达式 剔除字符串中 ,除了汉字的字符(只保留汉字) php 正则 只保留汉字,剔除所有符号

    <?php //提取字符串中的汉字其余信息剔除 $str='f龙,真 .,.,.?!::·…~&@#,.?!:;.……-&@#“”‘’〝 "〞'´'>< ...

  7. 严重: StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'goodsController' defined in file [D:\eclipse\eclipse-space\pinyougou_parent\pinyou

    由于错误太宽,没法截取完整的,所以不怎么连贯,但是不影响错误的解决. 这个错误是因为service无法自动注入.显示嵌套状态异常. 我就查看了一下我的坐标和配置文件,配置文件的路径和访问地址都是正确的 ...

  8. PHP的数据类型和魔术常量

    一. 1.boolean 布尔类型 (布尔值本身,整型0,浮点型0.0,空字符串,不包含任何元素的数组,不包括任何成员变量的对象 NULL,未赋值的变量) 2.integer 整型 3.float 浮 ...

  9. LeetCode 70 - 爬楼梯 - [递推+滚动优化]

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...

  10. 前端面试题汇总(主要为 Vue)

    前端面试题汇总 1. 谈谈你对MVVM开发模式的理解 MVVM分为Model.View.ViewModel三者. 1)Model:代表数据模型,数据和业务逻辑都在Model层中定义: 2)View:代 ...