Vue:全选多个选择框

可以使用 v-model 来绑定一个布尔类型的变量来实现全选多个选择框的功能。具体步骤如下:

  1. data中定义一个数组,用来存储所有需要选择的项的状态。

  2. 在模板中使用 v-for 指令循环渲染每个选择框,并将每个选择框的状态绑定到数组中对应的项上。

  3. 在模板中添加一个全选复选框,将其状态绑定到一个布尔类型的变量上。

  4. 使用 watch 监听全选复选框的状态变化,当全选复选框的状态改变时,遍历数组中的每一项,将其状态设置为全选复选框的状态即可。

示例代码:

<template>
  <div>
    <input type="checkbox" v-model="selectAll"> 全选
    <div v-for="(item, index) in items" :key="index">
      <input type="checkbox" v-model="item.checked"> {{ item.label }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectAll: false,
      items: [
        { label: '选项1', checked: false },
        { label: '选项2', checked: false },
        { label: '选项3', checked: false },
      ],
    };
  },
  watch: {
    selectAll(val) {
      this.items.forEach(item => {
        item.checked = val;
      });
    },
  },
};
</script>

在上面的代码中,我们定义了一个 selectAll 变量来表示全选复选框的状态,一个 items 数组来存储所有需要选择的项的状态。在模板中,使用 v-for 指令循环渲染每个选择框,并将每个选择框的状态绑定到数组中对应的项上。同时,还添加了一个全选复选框,并将其状态绑定到 selectAll 变量上。

watch 中,监听 selectAll 变量的变化,当它的状态改变时,遍历 items 数组中的每一项,将其状态设置为 selectAll 的状态即可实现全选功能。

结果展示:

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现全选删除的功能,可以按照以下步骤: 1. 定义一个数组来存储要删除的数据。 2. 在表格中添加一个全选和每行数据的选择。 3. 绑定全选的点击事件,将所有行的选择状态与全选状态保持一致。 4. 绑定每行数据的选择的点击事件,将该行数据的选择状态保存到数组中。 5. 绑定删除按钮的点击事件,遍历数组中的每个选择状态为 true 的数据并删除它们。 下面是一个简单的示例代码: ```html <template> <div> <table> <thead> <tr> <th><input type="checkbox" v-model="selectAll"></th> <th>姓名</th> <th>年龄</th> </tr> </thead> <tbody> <tr v-for="(item, index) in dataList" :key="index"> <td><input type="checkbox" v-model="item.checked"></td> <td>{{ item.name }}</td> <td>{{ item.age }}</td> </tr> </tbody> </table> <button @click="deleteData">删除选中数据</button> </div> </template> <script> export default { data() { return { selectAll: false, dataList: [ { name: '张三', age: 20, checked: false }, { name: '李四', age: 25, checked: false }, { name: '王五', age: 30, checked: false } ] }; }, methods: { // 全选/取消全选 toggleSelectAll() { for (let i = 0; i < this.dataList.length; i++) { this.dataList[i].checked = this.selectAll; } }, // 删除选中数据 deleteData() { const deletedData = []; for (let i = 0; i < this.dataList.length; i++) { if (this.dataList[i].checked) { deletedData.push(this.dataList[i]); } } for (let i = 0; i < deletedData.length; i++) { const index = this.dataList.indexOf(deletedData[i]); if (index !== -1) { this.dataList.splice(index, 1); } } this.selectAll = false; } }, watch: { // 监听每行数据的选择状态,更新全选状态 dataList: { handler() { const checkedCount = this.dataList.filter(item => item.checked).length; this.selectAll = checkedCount === this.dataList.length; }, deep: true } } }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孙 悟 空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值