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中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
Vue常用API、高级API的相关总结
Feb 02 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
vue postcss-px2rem 自适应布局
May 15 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
php中的登陆login
2007/01/18 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
Python写的服务监控程序实例
2015/01/31 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
Python-openCV开运算实例
2020/07/05 Python
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
几道数据库的面试题或笔试题
2014/05/31 面试题
二年级学生评语大全
2014/04/23 职场文书
色戒观后感
2015/06/12 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python