vue antd项目实战——select组件mode=“multiple“多选模式下限制选择个数

vue antd项目实战——checkbox多选框限制选择个数(disable属性与includes方法)

往期知识调用(步骤不懂就看这儿)

文章内容文章链接
vue antd项目实战——checkbox多选框限制选择个数disabled属性与includes方法)https://blog.csdn.net/XSL_HR/article/details/129798090?spm=1001.2014.3001.5501
ant design vue组件库的引入与使用https://blog.csdn.net/XSL_HR/article/details/127396384

场景复现

在近期的项目开发中,碰到了一个关于select组件mode="mutiple"多选模式限制选择个数的需求(具体需求如下)。涉及到select的使用以及ant design vue中的disabled属性,以及JavaScript中的findIndex方法。因此本期文章以需求为主线,学习上述三个知识点,实现需求。👇👇👇

具体需求

  • 多选最多选择八个
  • 选满八个后,其他选项变成disabled状态
  • 取消已选择的选项后,可以继续选择其他选项(非一次性)

方法

  • 借助ant design vue组件库的disabled属性
  • 借助JavaScript原生的findIndex方法

最终效果:(部分页面)
在这里插入图片描述

实战演示

下面将通过实战代码来实现上述需求👇👇👇

项目的UI框架依旧采用ant design vue组件库(移步官方文档查看详情

搭建之前,我们先看看官方文档对select的介绍,简单实现基础的多选模式下拉框

何时使用

  • 弹出一个下拉菜单给用户选择操作,用于代替原生的选择器,或者需要一个更优雅的多选器时。
  • 当选项少时(少于 5 项),建议直接将选项平铺,使用 Radio 是更好的选择。

基础搭建:(使用组件之前,一定要先注册后使用

<template>
  <a-select
    v-model:value="value"
    mode="multiple"
    style="width: 100%"
    placeholder="Please select"
    :options="[...Array(25)].map((_, i) => ({ value: (i + 10).toString(36) + (i + 1) }))"
    @change="handleChange"
  ></a-select>
</template>
<script lang="ts">
import { ref } from 'vue';

const handleChange = (value: string[]) => {
   console.log(`selected ${value}`);
};

const value = ref(['a1', 'b2']),
</script>

实现效果
在这里插入图片描述

1、多选模式下拉选择框的搭建

多选框的数据来自于后端接口返回的数据

源代码

<a-select 
   v-model:value="formState.projectMember" 
   style="width: 400px;" 
   placeholder="请选择项目成员(不超过八人)"
   mode="multiple"
   :maxTagCount="8"
   :showArrow="true"
   allowClear
   >
   <a-select-option 
      v-for="item of projectMemberOptions" 
      :key="item"
      >{{item}}
   </a-select-option>
</a-select>
<p 
  style="
     color:rgba(0, 0, 0, 0.45);
     margin-bottom:-10px
     "
  >项目成员最多只能选择八人
</p>

实现效果:(部分页面)
在这里插入图片描述

此时只是限制了输入框展示的tag标签为八个,并没有从根本限制选择的数据个数

2、多选下拉框限制选择个数

利用JavaScript原生的findIndex方法,判断数组中符合条件的元素。

在这里插入图片描述在这里插入图片描述
源代码

<a-select 
   v-model:value="formState.projectMember" 
   style="width: 400px;" 
   placeholder="请选择项目成员(不超过八人)"
   mode="multiple"
   :maxTagCount="8"
   :showArrow="true"
   allowClear
   >
   <a-select-option 
      v-for="item of projectMemberOptions" 
      :key="item"
      :disabled="
                formState.projectMember.length == 8 
                && (formState.projectMember.findIndex(i=> i === item.labelCode) === -1)
                "
      >{{item}}
   </a-select-option>
</a-select>
<p 
  style="
     color:rgba(0, 0, 0, 0.45);
     margin-bottom:-10px
     "
  >项目成员最多只能选择八人
</p>

实现效果
在这里插入图片描述


此时,需求已经全部实现!!


下期文章将介绍vue antd spinning动画的使用(增强交互体验)~ ~
感兴趣的小伙伴可以订阅本专栏,方便后续了解学习~
觉得这篇文章有用的小伙伴们可以点赞➕收藏➕关注哦~

在这里插入图片描述

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以通过监听第一个 Select 的 change 事件,然后根据选择的值来动态更新第二个 Select 的选项。 具体步骤如下: 1. 定义两个 Select 组件,并为它们分别绑定 value 和 options 属性。 ```html <template> <div> <a-select mode="multiple" :value="selectedValues" @change="handleFirstSelectChange" > <a-select-option v-for="option in firstOptions" :key="option.value"> {{ option.label }} </a-select-option> </a-select> <a-select mode="multiple" :value="secondSelectedValues"> <a-select-option v-for="option in secondOptions" :key="option.value"> {{ option.label }} </a-select-option> </a-select> </div> </template> ``` 2. 在组件的 data 中定义两个数组,分别用于存储第一个 Select 和第二个 Select 的选项以及选中的值。 ```javascript export default { data() { return { selectedValues: [], secondSelectedValues: [], firstOptions: [ { label: 'Option 1', value: 1 }, { label: 'Option 2', value: 2 }, { label: 'Option 3', value: 3 }, ], secondOptions: [ { label: 'Option A', value: 'A' }, { label: 'Option B', value: 'B' }, { label: 'Option C', value: 'C' }, ], }; }, // ... }; ``` 3. 实现第一个 Select 的 change 事件处理方法。 ```javascript export default { // ... methods: { handleFirstSelectChange(value) { // 根据选择的值动态更新第二个 Select 的选项 if (value.includes(1)) { this.secondOptions = [ { label: 'Option A', value: 'A' }, { label: 'Option B', value: 'B' }, ]; } else if (value.includes(2)) { this.secondOptions = [ { label: 'Option B', value: 'B' }, { label: 'Option C', value: 'C' }, ]; } else { this.secondOptions = [ { label: 'Option A', value: 'A' }, { label: 'Option C', value: 'C' }, ]; } // 重置第二个 Select 的选中值 this.secondSelectedValues = []; }, }, }; ``` 4. 最后,将第二个 Select 组件的 value 属性绑定到组件的 secondSelectedValues 数据属性上。 ```html <a-select mode="multiple" :value="secondSelectedValues"> <a-select-option v-for="option in secondOptions" :key="option.value"> {{ option.label }} </a-select-option> </a-select> ``` 这样,当用户选择第一个 Select 的选项时,第二个 Select 的选项会根据选择的值动态更新,并且第二个 Select 的选中值会被重置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dorable_Wander

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

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

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

打赏作者

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

抵扣说明:

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

余额充值