element的全选多选和反选

element中el-tabel的多选全选和反选

记录一下,以防自己忘记!!!

  • row-key:指定el-table每一行数据的唯一标识符,用于在表格操作中进行准确的匹配和更新
:row-key="
          (row) => {
            return row.id;
          }
        "
ref="multipleTable"
  • reserve-selection=“true”,简单来说就是在切换页码时,之前选择的行将会被保留选中状态。
<el-table-column
     type="selection"
     :reserve-selection="true"
 ></el-table-column>
  • this.$refs.multipleTable.toggleRowSelection(i, true);
  • 是通过引用调用表格组件实例的方法来切换某一行的选中状态
  • 第一个参数 i:代表选中状态的行的索引或唯一标识符。
  • 第二个参数 true:表示将该行设置为选中状态。若传入 false 则表示将该行设置为非选中状态。
  • 注意:上面的只适用于element-ui的el-table组件中,
    自定义组件需改成this.$refs?.multiple?.$refs?.multiple.toggleRowSelection(i, true)

el-checkbox的全选反选和多选

indeterminate 是一个用于Checkbox的选中状态,表示选中状态不确定或半选中的情况

 <el-checkbox
          :indeterminate="isIndeterminate"
          v-model="selectAll"
          @change="handleSelectAll"
          >全选</el-checkbox
        >

完整代码

index.js

<template>
  <div class="">
    <el-button @click="clickDialog">点击打开弹窗</el-button>
    <Dialog ref="Dialog"></Dialog>
  </div>
</template>

<script>
import Dialog from './component/dialog.vue'
export default {
  name: "",

  props: {},

  components: {
    Dialog
  },

  data() {
    return {
      list:['a','b','c']
    };
  },

  computed: {},

  watch: {},
  created() {},

  methods: {
    clickDialog(){=
      //打开弹窗
      this.$refs.Dialog.dialogVisible=true;
      //向弹窗传值
      this.$refs.Dialog.init(this.list);
    }
  },

  mounted() {},
};
</script> 

dialog.vue

<template>
  <div>
    <el-dialog
      :visible.sync="dialogVisible"
      :close-on-click-modal="false"
      @close="handleClose"
      width="30%"
      title="标题"
    >
      <!-- 表格-->
      <el-table
        :data="listView"
        stripe
        style="width: 100%"
        :header-cell-style="{ background: '#F2F2F7' }"
        :row-key="
          (row) => {
            return row.id;
          }
        "
        ref="multipleTable"
        @selection-change="handleSelectionChange"
      >
        <!-- :reserve-selection="true",简单来说就是在切换页码时,之前选择的行将会被保留选中状态。 -->
        <el-table-column
          type="selection"
          :reserve-selection="true"
        ></el-table-column>
        <el-table-column type="index" label="序号"> </el-table-column>
        <el-table-column prop="code" label="编码"> </el-table-column>
        <el-table-column prop="name" label="名称"> </el-table-column>
        <el-table-column prop="value" label="数据"> </el-table-column>
      </el-table>
      <!-- 多选框 -->
      <div class="check">
        <el-checkbox
          :indeterminate="isIndeterminate"
          v-model="selectAll"
          @change="handleSelectAll"
          >全选</el-checkbox
        >
        <el-checkbox-group
          v-model="selectedItems"
          @change="handleCheckedCitiesChange"
        >
          <el-checkbox
            v-for="item in listView"
            :key="item.name"
            :label="item.name"
            >{{ item.name }}</el-checkbox
          >
        </el-checkbox-group>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="cancel">取消</el-button>
        <el-button type="primary" @click="confirm">确定</el-button>
      </span>
    </el-dialog>
  </div>
</template>
      
  <script>
export default {
  name: "",

  props: {},

  components: {},

  data() {
    return {
      dialogVisible: false,
      isIndeterminate: true,
      selectAll: false,
      selectedItems: [],
      listView: [
        { name: "a", code: "01", value: "1" },
        { name: "b", code: "02", value: "2" },
        { name: "c", code: "03", value: "3" },
        { name: "d", code: "04", value: "4" },
        { name: "e", code: "05", value: "5" },
        { name: "f", code: "06", value: "6" },
      ],
    };
  },
  created() {},
  computed: {},
  watch: {},
  methods: {
    // 从父组件传递过来的值
    init(val) {
      // 反选
      this.listView.forEach((i) => {
        val.forEach((j) => {
          // 如果传递的值和某项相同则选中此条数据
          if (i.name == j) {
            //没有加延迟,会报Cannot read properties of undefined (reading 'toggleRowSelection')"
            // 如果不报也可以不加
            setTimeout(() => {
              // 重要代码
              this.$refs.multipleTable.toggleRowSelection(i, true);
            }, 10);
          }
        });
      });
      // el-checkout的反选
      this.selectedItems = val;
    },
    // 可以获得当前el-table选中和全选的数据
    handleSelectionChange(val) {},
    // 多选
    handleCheckedCitiesChange(value) {
      let name = value.length;
      // 选中的值的数量是否与获取值数量会否相等
      if (name === this.listView.length) {
        this.selectAll = true;
      } else {
        this.selectAll = false;
      }
      // indeterminate 是一个用于Checkbox的选中状态,表示选中状态不确定或半选中的情况
      this.isIndeterminate = name > 0 && name < this.listView.length;
      this.selectedItems = value;
    },
    // 全选
    handleSelectAll(checked) {
      if (checked) {
        // 如果checkbox的v-model为true时
        this.selectedItems = this.listView.map((item) => item.name);
      } else {
        this.selectedItems = [];
      }
      this.isIndeterminate = false;
    },
    // 确定
    confirm() {
      this.dialogVisible = false;
    },
    // 取消
    cancel() {
      this.dialogVisible = false;
    },
    // 弹窗关闭
    handleClose() {},
  },

  mounted() {},
};
</script>
  <style scoped>
    /*只是想好看点  */
.check {
  text-align: left;
}
::v-deep .el-checkbox {
  width: 100%;
  margin-top: 10px;
}
</style>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值