zoukankan      html  css  js  c++  java
  • Vue.js 多选列表(Multi-Select)组件

    搬运公众号早前文章

    多选列表 (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"

    <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 + '
    ----------------
    ' + 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;
          },
     },
    ...
    


    源代码

    Github

    作者:Yuki
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处(附上博客链接)。 如果您觉得本篇博文对您有所收获,请点击右下角的 [推荐],谢谢!

    关注我的公众号,不定期更新学习心得
  • 相关阅读:
    Taobao OpenERP Connector 简要说明
    OpenERP 搜索过滤: 过去三个月
    openerp编辑与非编辑下隐藏按钮的方法
    javascript入门系列演示·三种弹出对话框的用法实例
    Linux Ubuntu 开机自动启动项设置方法 例:svn服务
    Linux下SVN(Subversion)自动启动脚本
    PgSql备份pg_dump与还原手记pg_restore(转)可以直接跳转至最后面的示例进行查看
    windows下cmd命令行显示UTF8字符设置(CHCP命令)
    Python一些特殊用法(map、reduce、filter、lambda、列表推导式等)
    Linux的fuser命令解析
  • 原文地址:https://www.cnblogs.com/yukiwu/p/14468934.html
Copyright © 2011-2022 走看看