IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> el-mentUI 下拉框多选并且可支持checkBox,全选 -> 正文阅读

[JavaScript知识库]el-mentUI 下拉框多选并且可支持checkBox,全选

先上组件的效果图:

?取值打印:

?组件 MultipleSelect/index.vue:

<template>
  <div>
    <!-- collapse-tags  超过2个省略+ 显示  -->
    <el-select
      v-model="selectValues"
      v-bind="$attrs"
      multiple
      placeholder="请选择"
      style="width: 100%"
      @change="changeSelect">
      <el-option v-if="options.length > 0 " label="全选" value="全选">
        <el-checkbox v-model="isSelectAll" @click.prevent.native>全选</el-checkbox>
      </el-option>
      <el-option
        v-for="item in options"
        :key="item[props.value]"
        :label="item[props.label]"
        :value="item[props.value]">
        <el-checkbox v-model="item.isCheck" @click.prevent.native>{{ item[props.label] }}</el-checkbox>
      </el-option>
    </el-select>
  </div>
</template>

<script>
export default {
  name: "MultipleSelect",
  inheritAttrs: false, // 似乎设不设置都可以
  model: {
    // prop: "initSelectValues",
    event: "change",
  },
  props: {
    // initSelectValues: {
    //   type: Array,
    //   default: () => [],
    // },
    // 下拉选项
    options: {
      type: Array,
      default: () => [],
    },
    // 选项键值对
    props: {
      type: Object,
      default: () => {
        return {
          label: "label",
          value: "value",
        };
      },
    },
  },
  data() {
    return {
      selectValues: [],
      isSelectAll: false
    }
  },
  watch: {
    // 监听(全选,全不选以及checkbox是否勾选)
    selectValues: {
      handler(arr) {
        this.options.forEach((item) => {
          if (arr.includes(item[this.props.value])) {
            item.isCheck = true;
          } else {
            item.isCheck = false;
          }
        });

        if (arr.length === this.options.length) {
          this.isSelectAll = true;
        } else {
          this.isSelectAll = false;
        }
        // 强制更新(checkbox回显)
        this.$forceUpdate();
      }
    }
  },
  methods: {
    // 改变选中的值  
    changeSelect(val) {
      if (val.includes("全选")) {
        // 说明已经全选了,所以全不选
        if (val.length > this.options.length) {
          this.selectValues = [];
        } else {
          this.selectValues = this.options.map(
            (item) => item[this.props.value]
          );
        }
      }
      this.$emit("change", this.selectValues);
    }
  },
  created() {
    // 回显
    // this.selectValues = this.initSelectValues
  },
  mounted() {},
  destroyed() {
    this.$destroy()
    this.selectValues = []
  }
};
</script>

调用的时候 父组件

<template>
  <div>
    <MultipleSelect v-model="value" :options="options"></MultipleSelect>
    <el-button @click="confirm">确定</el-button>
  </div>
</template>

<script>
import MultipleSelect from "@/components/MultipleSelect/index.vue";
export default {
  components: { MultipleSelect },
  data() {
    return {
      value: [],
      options: [
        {
          value: "1",
          label: "黄金糕",
        },
        {
          value: "2",
          label: "双皮奶",
        },
        {
          value: "3",
          label: "蚵仔煎",
        },
        {
          value: "4",
          label: "龙须面",
        },
        {
          value: "5",
          label: "北京烤鸭",
        },
      ],
    };
  },
  methods: {
    confirm() {
      console.log("value:", this.value);
    },
  },
  created() {},
  mounted() {},
  destroyed() {
    this.$destroy();
  },
};
</script>

最后为了方便大家的沟通与交流请加QQ群:?625787746

请进QQ群交流:【IT博客技术分享群①】:https://jq.qq.com/?_wv=1027&k=DceI0140

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:00:21  更:2021-08-20 15:02:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 8:57:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码