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 相关文章推荐
vue+iview实现文件上传
Nov 17 Vue.js
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
vue实现简易音乐播放器
Aug 14 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
mysql 性能的检查和优化方法
2009/06/21 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
javascript history对象详解
2017/02/09 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
python实现计算倒数的方法
2015/07/11 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python分析学校四六级过关情况
2017/11/22 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
Python基于当前时间批量创建文件
2020/05/07 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
打造完美自荐信
2014/01/24 职场文书
卫生安全检查制度
2014/02/04 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
PO模式在selenium自动化测试框架的优势
2022/03/20 Python
字节飞书面试promise.all实现示例
2022/06/16 Javascript