antd vue Checkbox 多选框

先看官网例子

<template>
  <div>
    <div :style="{ borderBottom: '1px solid #E9E9E9' }">
      <a-checkbox :indeterminate="indeterminate" :checked="checkAll" @change="onCheckAllChange">
        Check all
      </a-checkbox>
    </div>
    <br />
    <a-checkbox-group v-model="checkedList" :options="plainOptions" @change="onChange" />
  </div>
</template>
<script>
const plainOptions = ['Apple', 'Pear', 'Orange'];
const defaultCheckedList = ['Apple', 'Orange'];
export default {
  data() {
    return {
      checkedList: defaultCheckedList,
      indeterminate: true,
      checkAll: false,
      plainOptions,
    };
  },
  methods: {
    onChange(checkedList) {
      this.indeterminate = !!checkedList.length && checkedList.length < plainOptions.length;
      this.checkAll = checkedList.length === plainOptions.length;
    },
    onCheckAllChange(e) {
      Object.assign(this, {
        checkedList: e.target.checked ? plainOptions : [],
        indeterminate: false,
        checkAll: e.target.checked,
      });
    },
  },
};
</script>
属性默认值说明
checkedList[]选中的列表
indeterminatetrue在实现全选效果时,你可能会用到indeterminate属性
checkAllfalse全选是否选中
plainOptions[‘Apple’, ‘Pear’, ‘Orange’]数据列表
v-model“checkedList”这里很容易被忽略 和选中子级效果相关

自定义选项时很容易出错的地方

当你的 plainOptions 是 多维对象的时候 :value="item" 这里 应该是 子级 而不是 id 或者 key

<a-checkbox-group v-model="checkedList" @change="onChange" class="w-full grid grid-cols-3 gap-6">
	<a-checkbox v-for="(item, index) in authOptions" :value="item" :key="index" style="margin-left: 0;">
	 	{{ item.auth_name }}
	</a-checkbox>
</a-checkbox-group>
[
	{
		id: 101,
		name: 'name101',
	},
	{
		id: 101,
		name: 'name101',
	}
	{
		id: 101,
		name: 'name101',
	}
]

:value="item" 这里 对应的是 {id: 101,name: 'name101'}
导致无法全选, 反选的原因就是这里

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vue3antd多选框可以通过使用ant-design-vue库来实现。根据引用和引用的代码,你可以按需引入`Checkbox`组件,并在UI代码中使用`a-checkbox`和`a-checkbox-group`标签创建多选框。 下面是一个示例代码,展示如何在vue3antd中使用多选框: ```html <template> <a-row class="labelBox"> <a-col :span="4" class="label">选择学生:</a-col> <a-col :span="18"> <div class="checkBox"> <a-checkbox :indeterminate="indeterminate" :checked="checkAll" @change="onCheckAllChange" :disabled="!unLockList.length>0"> 选择全部 </a-checkbox> <span>已选择 {{checkedList.length}} 个 / 可选学生 {{unLockList.length}} 个</span> </div> <a-checkbox-group class="optionsBox" v-model="checkedList" :options="plainOptions" @change="onAppChange" /> </a-col> </a-row> </template> <script> import { ref } from 'vue'; import { Checkbox } from 'ant-design-vue'; export default { components: { Checkbox, }, setup() { const plainOptions = ['学生1', '学生2', '学生3']; // 可选项 const checkedList = ref([]); // 已选择的项 const unLockList = ref([]); // 可选学生列表 const checkAll = ref(false); const indeterminate = ref(false); const onCheckAllChange = () => { // 处理选择全部的逻辑 }; const onAppChange = () => { // 处理选项改变的逻辑 }; return { plainOptions, checkedList, unLockList, checkAll, indeterminate, onCheckAllChange, onAppChange, }; }, }; </script> ``` 这段代码中,我们使用了`ref`函数来创建响应式的变量,将`plainOptions`、`checkedList`、`unLockList`、`checkAll`、`indeterminate`以及事件处理函数绑定到模板中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值