Vue多选列表组件深入详解


Posted in Vue.js onMarch 02, 2021

多选列表 (Multi-Select) 是一种将所有选项列出,并允许用户利用 Ctrl/Shift 键进行多选的 UI 元素。这是一种常见的设计元素。有时候为了节省空间,我们会将选项折叠于 Combo Box 中。为了方便用户操作,这个组件还将添加 Select All 和 Clear All 两个按钮,允许用户快速选择或清除选择。这个 UI 元素曾被运用于 Correlation Plot App 中。

Vue多选列表组件深入详解

注册组件

注册 Multi-Select 组件,简单来说就是复制粘贴已封装好的代码部分。此处建议注册全局组件。

设计该元素的时候考虑了两种模式:第一种是每次点击新选项将保留旧选项并添加新选项,如上述示例图形。这种是较为常见的一种方式。第二种是每次点击新选项则清除旧选项仅保留新选项。若使用这种方式进行多选,则需要利用Ctrl/Shift键。这种设计能便于用户在每一次的点击中消除旧选项。若使用第二方式,需要替换事件@click.exact="AddToOrDeleteFromSelectedColumns"@click.exact="ClickOnColumnListItem"

<script type="text/x-template" id="multi-select-template">
…
   <tr v-for = "(item,index) in columns" 
     @click.exact="AddToOrDeleteFromSelectedColumns"
     @click.shift.exact="AddMultipleToSelectedColumns"
     @click.ctrl.exact="AddToOrDeleteFromSelectedColumns"
     :title="function(item){if(item.longname){return 'Short Name: ' + item.name + '\n----------------\n' + item.longname}else{return item.name}}(item)"
     class="column-list-entry">
   ...
   </tr>
</script>
<script>
Vue.component("multi-select", {
  template: "#multi-select-template",
…
</script>

调用组件

直接添加自定义标签 调用组件。

<multi-select :legend_name="legend_name"
       :columns="columns"
       :selected_columns="selected_columns"
       @update_selected_columns="onSelectedColumnsChange">
</multi-select>

传递数据

最后还需要对组件传递数据。我们可以利用 v-bind 动态绑定数据到父级组件的数据中。

props 中 legend_name 绑定 Multi-Select 的所需显示的名称,columns 绑定 Multi-Select 的选项, selected_columns 绑定当前的已选项。另外我们还需要在父级实例中定义事件 “onSelectedColumnsChange”,用于刷新 Multi-Select 组件的显示。

data: function(){
   return {
     legend_name: "Input Columns",
     columns: 
     [
       {"name":"A","longname":"Copper"},
       {"name":"B","longname":"Aluminum Aluminum"},
       {"name":"C","longname":"Calcium"},
       {"name":"D","longname":"Calcium"},
   ],
     selected_columns: [],
   }
 },
... 
methods:{ 
   onSelectedColumnsChange:function(new_columns) {
     this.selected_columns = new_columns;
   },
 },
...

到此这篇关于Vue多选列表组件深入详解的文章就介绍到这了,更多相关Vue多选列表组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
vue实现可拖拽的dialog弹框
May 13 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
vue+springboot实现登录验证码
May 27 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 #Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 #Vue.js
vue脚手架项目创建步骤详解
Mar 02 #Vue.js
vue-cli中实现响应式布局的方法
Mar 02 #Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 #Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 #Vue.js
vue实现拖拽进度条
Mar 01 #Vue.js
You might like
几种显示数据的方法的比较
2006/10/09 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
js实现旋转木马效果
2017/03/17 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
JS作用域链详解
2017/06/26 Javascript
js实现导航跟随效果
2018/11/17 Javascript
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
python中的句柄操作的方法示例
2019/06/20 Python
django框架两个使用模板实例
2019/12/11 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
python实现银行账户系统
2021/02/22 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
UNIX文件类型
2013/08/29 面试题
回门宴新郎答谢词
2014/01/12 职场文书
社区工作者思想汇报
2014/01/13 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
Redis实现一个账号只能登录一个设备
2022/04/19 Redis