经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
Vue.js 多选列表(Multi-Select)组件
来源:cnblogs  作者:yukiwu  时间:2021/3/8 11:51:16  对本文有异议

搬运公众号早前文章

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

preview gif

注册组件


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

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

  1. <script type="text/x-template" id="multi-select-template">
  2. <tr v-for = "(item,index) in columns"
  3. @click.exact="AddToOrDeleteFromSelectedColumns"
  4. @click.shift.exact="AddMultipleToSelectedColumns"
  5. @click.ctrl.exact="AddToOrDeleteFromSelectedColumns"
  6. :title="function(item){if(item.longname){return 'Short Name: ' + item.name + '\n----------------\n' + item.longname}else{return item.name}}(item)"
  7. class="column-list-entry">
  8. ...
  9. </tr>
  10. </script>
  11. <script>
  12. Vue.component("multi-select", {
  13. template: "#multi-select-template",
  14. </script>


调用组件


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

  1. <multi-select :legend_name="legend_name"
  2. :columns="columns"
  3. :selected_columns="selected_columns"
  4. @update_selected_columns="onSelectedColumnsChange">
  5. </multi-select>


传递数据


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

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

  1. data: function(){
  2. return {
  3. legend_name: "Input Columns",
  4. columns:
  5. [
  6. {"name":"A","longname":"Copper"},
  7. {"name":"B","longname":"Aluminum Aluminum"},
  8. {"name":"C","longname":"Calcium"},
  9. {"name":"D","longname":"Calcium"},
  10. ],
  11. selected_columns: [],
  12. }
  13. },
  14. ...
  15. methods:{
  16. onSelectedColumnsChange:function(new_columns) {
  17. this.selected_columns = new_columns;
  18. },
  19. },
  20. ...


源代码

Github

原文链接:http://www.cnblogs.com/yukiwu/p/14468934.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号