博客地址:https://ainyi.com/81

基于 element ui 的升级版穿梭框组件发布到 npm 啦

看过我之前博客的同学或许知道我之前写过关于 element 穿梭框组件重构的博客 关于 Element 组件的穿梭框的重构,当时还有一些同学直接通过微信询问很多关于这个组件的问题

去年在上家公司就重构过的穿梭框,一直懒得封装成一个 Vue 组件发布到 npm,现在趁着目前比较闲,就这几天继续完善和优化、迭代更新 + 封装,终于发布啦~

krry-transfer

基于 Element UI 的升级版穿梭框组件

  1. 多级多选穿梭框(常用于省市区三级联动)
  2. 针对数据量庞大的分页穿梭框

Example

kr-cascader

kr-paging

Specialty

kr-cascader 多级多选穿梭框

  1. 多级多选
  2. 当勾选省级并添加,过滤备选框的当前省级,同时在已选框该省级的子级合并成一个省级
  3. 当勾选市级并添加,过滤备选框的当前市级,同时在已选框该市级的子级合并成一个市级
  4. 当从已选框中移除数据,针对移除的数据是省、市、区分别在备选框新增这些数据
  5. 当父级勾选多个数据,下级方框展示的数据为最后勾选父级的子级集合
  6. 当多个勾选的父级逐个取消勾选,下级方框展示的数据为上一次勾选父级的子级集合
  7. 支持搜索

kr-paging 数据量庞大的分页穿梭框

  1. 实现分页
  2. 搜索,在所有数据里搜索(不是在当前分页的数据里搜索),这样就不用在每个分页都搜索一次;搜索后的结果也会自动分页
  3. 全选只在当前页里的全选
  4. 穿梭框左右两个框的联动

Install & Use

npm install krry-transfer --save

依赖 Element checkbox、button 组件和样式

import Vue from 'vue'
import krryTransfer from 'krry-transfer' Vue.use(krryTransfer) /*
* or 按需引入
* import { krryCascader, krryPaging } from 'krry-transfer'
*
* Vue.use(krryCascader)
* Vue.use(krryPaging)
*/

kr-cascader

<template>
<div>
<kr-cascader
:dataObj="dataObj"
:selectedData="selectedData"
></kr-cascader>
</div>
</template> <script>
export default {
data() {
return {
dataObj: {
province: {
'101103': '广东省',
},
city: {
'101103': [
{
id: 101164181112,
label: '深圳市'
}
]
},
county: {
'101164181112': [
{
id: 106105142126,
label: '宝安区'
}
]
}
},
selectedData: [
{
id: '101101-101101101112',
label: '北京市-通州区'
}
]
}
}
}
</script>

kr-paging

<template>
<div>
<kr-paging
:dataList="dataList"
:selectedData="selectedData"
:pageSize="100"
></kr-paging>
</div>
</template> <script>
export default {
data() {
return {
dataList: [
{
id: 0,
label: '这是第0条数据'
},
{
id: 1,
label: '这是第1条数据'
}
],
selectedData: [
{
id: 0,
label: '这是第0条数据'
}
]
}
}
}
</script>

API ( kr-cascader )

Attributes

name type default description
boxTitle Array ['省份', '城市', '区县', '选中地域'] 按顺序指定每个方框的 title
boxOperation Array ['添加省份', '添加城市', '添加区县', '删除地域'] 按顺序指定每个方框底部的操作文案
dataObj Object {} kr-cascader 的数据源
selectedData Array [] 已选数据集合

Events

name params description
onChange String: value:已选数据集合 当已选数据变化时触发的事件

Methods

name params description
getSelectedData - 获取已选数据集合的钩子

注:dataObj、selectedData 的数据格式如下

dataObj(kr-cascader 的数据源):

dataObj: {
province: {
'省id': 'xx省'
},
city: {
'省id': [
{
id: '市id',
label: 'xx市'
}
]
},
county: {
'市id': [
{
id: '区id',
label: 'xx区'
}
]
}
}

selectedData(已选数据集合):

selectedData: [
{
id: '101111',
label: '内蒙古自治区'
},
{
id: '101101-101101101112',
label: '北京市-通州区'
},
{
id: '101103-101164001112-106197987125',
label: '广东省-惠州市-惠城区'
}
]

API ( kr-paging )

Attributes

name type default description
boxTitle Array ['待选区', '已选中'] 按顺序指定每个方框的 title
pageSize Number 160 分页大小
dataList Array [] kr-paging 的数据源
selectedData Array [] 已选数据集合

Events

name params description
onChange String: value:已选数据集合 当已选数据变化时触发的事件

Methods

name params description
getSelectedData - 获取已选数据集合的钩子

About

npm:krry-transfer

Blog:Krryblog

GitHub:krry-transfer

License

MIT

Issue

有个小问题纠结了很久,在做按需加载模块的时候,遇到ES6 import 解构失败的问题,网上查了一下,才知道是 babel 对 export default 的处理,例如:

export default {
host: 'localhost',
port: 80
}

变成了

module.exports.default = {
host: 'localhost',
port: 80
}

参考文章:ES6 export default 和 import语句中的解构赋值

解决方法是使用 babel-plugin-add-module-exports 插件,在 .babelrc 配置:

{
"presets": [["env", { "modules": "commonjs" }]],
"plugins": ["add-module-exports"]
}

博客地址:https://ainyi.com/81

最新文章

  1. Winform窗体实现简单的二维码生成和保存
  2. mysql metadata lock锁
  3. sklearn分类
  4. asp.net mvc int[] 和 string[] 自定义数组绑定
  5. 理解NSTextContainer
  6. 我的Java后端书架2016年暮春3.0版(转)
  7. swift学习网站
  8. 数组排序,字符串math,replace练习
  9. EF6 Database First (DbContext) - Change Schema at runtime
  10. 《编写高质量代码-Web前端开发修改之道》笔记--第三章 高质量的HTML
  11. 使用WIF实现单点登录Part II —— Windows Identity Foundation基本原理 -摘自网络
  12. Linux Terminal 控制终端的使用
  13. [React Testing] Intro to Shallow Rendering
  14. MP3/WAV 播放
  15. 解决Timer回调方法重复调用的问题
  16. SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数
  17. 对数据缺失的处理(R)
  18. ArrayList的实现细节(基于JDK1.8)
  19. Asp.net MVC 生成zip并下载
  20. lua时间戳和日期转换及踩坑

热门文章

  1. 隐藏select下拉框的三角按钮
  2. springboot + mybatis + mycat整合
  3. node学习笔记(一)本地文件目录查看器
  4. 织梦cms列表页获取标签
  5. 使用Ingress来负载分发微服务
  6. Python之——爱心代码参与情人节
  7. 【从刷面试题到构建知识体系】Java底层-synchronized锁-1
  8. 使用FastReport报表工具生成报表PDF文档
  9. MacOS 安装MysqlDB 问题解决方案( 解决 IndexError: string index out of range)
  10. Python之单例模式的多种实现