antd——a-tree-select 树形选择控件 与 a-cascader 级联选择器 的对比——技能提升

在遇到 省市区多级联动数据的时候,经常会用到的就是 a-cascader级联选择器。
在这里插入图片描述

1.级联选择器的使用方法

在这里插入图片描述

1.1 需要指定数据源——options 数据结构是 对象数组嵌套——value/label/children

<a-cascader :options="options" placeholder="Please select" @change="onChange" />

数据源结构如下:

var options = [
  {
    value: 'zhejiang',
    label: '浙江',
    children: [
      {
        value: 'hangzhou',
        label: '杭州',
        children: [
          {
            value: 'xihu',
            label: '西湖',
          },
        ],
      },
    ],
  },
]

1.2 默认是选中最后一级才能算选中,可以通过添加change-on-select改为任意选中一级

<a-cascader :options="options" change-on-select @change="onChange" />

1.3 绑定的是一个数组,无论是否选中任意一级还是最后一级,结果都是数组

1.4 可以添加:show-search="{ filter }"来实现检索筛选功能

<a-cascader
    :options="options"
    :show-search="{ filter }"
    placeholder="Please select"
    @change="onChange"
  />

过滤方法如下:

filter(inputValue, path) {
  return path.some(option => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1);
},

1.5 如果数据源的字段名非value/label/children,可以通过fieldNames来指定其他参数

<a-cascader
    :field-names="{ label: 'name', value: 'code', children: 'items' }"
    :options="options"
    placeholder="Please select"
    @change="onChange"
  />

此时支持的数据源可以是下面的形式了

var options = [
  {
    code: 'zhejiang',
    name: '浙江',
    items: [
      {
        code: 'hangzhou',
        name: '杭州',
        items: [
          {
            code: 'xihu',
            name: '西湖',
          },
        ],
      },
    ],
  },
]

2.树形选择控件的使用方法

在这里插入图片描述

2.1 需要指定数据源——treeData 数据结构是 对象数组嵌套——title/value/key/children

<a-tree-select
    v-model="value"
    style="width: 100%"
    :tree-data="treeData"
    show-search
    :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
    placeholder="Please select"
    allow-clear
    tree-default-expand-all
  />

数据源结构如下:

var treeData = [
  {
    title: 'Node1',
    value: '0-0',
    key: '0-0',
    children: [
      {
        title: 'Child Node1',
        value: '0-0-0',
        key: '0-0-0',
      },
    ],
  },
]

2.2 默认是选中任意一级

2.3 绑定的是一个字符串,如果设置成了multiple多选,则绑定的值是一个字符串的数组

 <a-tree-select
    show-search
    style="width: 100%"
    :value="value"
    :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
    placeholder="Please select"
    :tree-data="treeData"
    allow-clear
    multiple
    tree-default-expand-all
  />

2.4 可以添加:show-search="{ filter }"来实现检索筛选功能

<a-cascader
    :options="options"
    :show-search="{ filter }"
    placeholder="Please select"
    @change="onChange"
  />

过滤方法如下:

filter(inputValue, path) {
  return path.some(option => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1);
},

3. 如果想要多选或者绑定的结果是单个值,而非数组,则优先选择树形选择控件,因为回显会简单。

4. 如果是必须要选中最后一级才可以,则选择级联选择器,回显的时候需要给出一个数组,如果参数没有给出,则需要自行处理,将前面几级的value也一并存放到数组中才可以。

完成!!!

最后附上elementUI中的级联选择器的代码:

<el-cascader v-model="shelfSelect" clearable size="mini" :show-all-levels="true" style="width:200px;"
             filterable
             placeholder="全部货架"
             v-bind:options="shelfOptions"
             v-bind:props="{ expandTrigger: 'click',checkStrictly: true }">
    <template slot-scope="{ node, data }">
        <div>
            <i v-if="data.children" class="el-icon-map-location"></i>
            <i v-else class="el-icon-notebook-2"></i>
            <span>{{ data.label }}</span>
        </div>
    </template>
</el-cascader>

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶浩成520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值