最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3實現(xiàn)下拉選擇框多選功能的方法詳解

 更新時間:2023年09月10日 14:05:15   作者:SeaCassie  
在vue的實際開發(fā)過程中,我們?nèi)绾螌⒁赃x中的值直接渲染到頁面中,下面這篇文章主要給大家介紹了關(guān)于Vue3實現(xiàn)下拉選擇框多選功能的相關(guān)資料,需要的朋友可以參考下

起因:

項目采用vue3+elmentui-plus +ts 搭建成的。用戶界面設(shè)計上需要一個帶全選的下拉選擇框。而element plus 官網(wǎng) 提供的下拉多選框是

這種形式是沒有全選按鈕的,并且樣式也不符合想像中的全選的操作。故開始想法子去結(jié)合一個新的條件去封裝一個新的組件。

效果展示:

設(shè)計原理:

由于用戶更加熱衷于帶有全選的下拉框,并且不喜歡右側(cè)的√的選擇標(biāo)識,而需要換成和多選框一直的選中框,于是,根據(jù)已有的條件,我采用 el-select + el-checkbox的形式去編寫這個組件。

組件代碼構(gòu)成 創(chuàng)建子組件selectCheckBox.vue文件

html 部分

<el-select
    v-model="menusTitle"
    multiple
    collapse-tags
    collapse-tags-tooltip
    :placeholder="props.placeholder"
    clearable
    @clear="clearData"
  >
    <!-- @change="changeSelectMenu" -->
    <el-checkbox v-model="checkedAll" @change="selectAll">全選</el-checkbox>
    <el-option
      v-for="(item, index) in menuList"
      :key="item[props.id]"
      :value="item[props.id]"
    >
      <el-checkbox
        :label="item[props.label]"
        size="large"
        @change="changeCheckBox(item, index)"
        :checked="isChecked(item, index)"
        v-model="checkBoxObj[index]"
      />
    </el-option>
  </el-select>

js部分

<script lang="ts" setup>
import { ref, reactive, defineProps, defineEmits } from "vue";
const props = defineProps({
  list: { type: Array, required: true },
  id: { type: String, required: true },
  label: { type: String, required: true },
  modelValue: { type: Array },
  placeholder: { type: String, default: "選擇" },
});
const emit = defineEmits(["update:modelValue"]);
const value = ref("");
const checkedAll = ref("false");
const menus = ref([]);
const menuList = props.list;
const checkBoxObj = ref({});
menuList.forEach((res, index) => {
  checkBoxObj.value[index] = false;
});
const menusTitle = ref([]);
const changeSelectMenu = (val) => {};
const selectAll = (value) => {
  menus.value = [];
  menusTitle.value = [];
  if (value) {
    menuList.forEach((item, index) => {
      menus.value.push(item[props.id]);
      menusTitle.value.push(item[props.label]);
      checkBoxObj.value[index] = true;
    });
  } else {
    menus.value = [];
    menusTitle.value = [];
    menuList.forEach((item, index) => {
      checkBoxObj.value[index] = false;
    });
  }
  emit("update:modelValue", menus.value);
};
const isChecked = (item) => {
  return menus.value.indexOf(item[props.id]) > -1;
};
const changeCheckBox = (item, index) => {
  let i = menus.value.indexOf(item[props.id]);
  if (i == -1) {
    menus.value.push(item[props.id]);
    menusTitle.value.push(item[props.label]);
  } else {
    menus.value.splice(i, 1);
    menusTitle.value.splice(i, 1);
  }
  if (menus.value.length == menuList.length) {
    checkedAll.value = true;
  } else {
    checkedAll.value = false;
  }
  emit("update:modelValue", menus.value);
};
const clearData = () => {
  menus.value = [];
  menusTitle.value = [];
  emit("update:modelValue", menus.value);
  checkedAll.value = false;
  menuList.forEach((item, index) => {
    checkBoxObj.value[index] = false;
  });
};
</script>

css部分:

<style lang="scss" scoped>
.el-select-dropdown {
  .el-checkbox {
    display: flex;
    align-items: center;
    padding-left: 20px;
    width: 100%;
    box-sizing: border-box;
  }
  .el-select-dropdown__item {
    // background-color: red !important;
    padding: 0;
    display: flex;
    align-items: center;
  }
}
</style>

父組件調(diào)用

html 引入部分

 <selectCheckBox
          v-model="value3 "
          :list="options"
          id="value"
          label="label"
          placeholder="選擇項目"
        ></selectCheckBox>

js引入部分

import selectCheckBox from "@_components/dataClassification/selectCheckBox.vue";
const value3 = ref([]);
const options = [
  {
    value: "1",
    label: "項目一",
  },
  {
    value: "2",
    label: "項目二",
  },
  {
    value: "3",
    label: "項目三",
  },
];

總結(jié)

該組件 還在升級過程中,二次封裝組件處理。進(jìn)一步的封裝過程目標(biāo)是,做一個類el-select的參數(shù)的組件。今日留做記錄.

相關(guān)文章

  • vue使用element-plus依賴實現(xiàn)表格增加的示例代碼

    vue使用element-plus依賴實現(xiàn)表格增加的示例代碼

    這篇文章主要為大家詳細(xì)介紹了vue使用element-plus依賴實現(xiàn)表格增加,文中示例代碼講解的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-12-12
  • Vue項目中l(wèi)oading卡死的問題及解決方案

    Vue項目中l(wèi)oading卡死的問題及解決方案

    文章剖析Vue項目中l(wèi)oading卡死問題,揭示其本質(zhì)為異步阻塞與響應(yīng)式渲染沖突,提出分五層解決方案:nextTick強制刷新、任務(wù)分片/Worker解耦、組件封裝、組合式API管理狀態(tài)、性能優(yōu)化與架構(gòu)調(diào)整,強調(diào)需從UI、異步、計算等多維度優(yōu)化
    2025-07-07
  • Vue實現(xiàn)固定定位圖標(biāo)滑動隱藏效果

    Vue實現(xiàn)固定定位圖標(biāo)滑動隱藏效果

    移動端頁面,有時候會出現(xiàn)一些固定定位在底部圖標(biāo),比如購物車等。這篇文章主要介紹了Vue制作固定定位圖標(biāo)滑動隱藏效果,需要的朋友可以參考下
    2019-05-05
  • vue element-ui中table合計指定列求和實例

    vue element-ui中table合計指定列求和實例

    這篇文章主要介紹了vue element-ui中table合計指定列求和實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue實現(xiàn)選中效果

    vue實現(xiàn)選中效果

    本文給大家分享的是如何使用vue實現(xiàn)鼠標(biāo)點擊選中的效果,附上了實例代碼,有需要的小伙伴可以參考下
    2020-10-10
  • vue使用vuedraggable對列表進(jìn)行拖拽排序

    vue使用vuedraggable對列表進(jìn)行拖拽排序

    vuedraggable 是一個基于 Vue 的拖拽排序組件,它可以讓你輕松地在 Vue 應(yīng)用中實現(xiàn)拖拽排序功能,下面就跟隨小編一起來了解下它的具體應(yīng)用吧
    2024-12-12
  • vue中如何修改props傳進(jìn)來的值

    vue中如何修改props傳進(jìn)來的值

    大家應(yīng)該都知道vue是單向數(shù)據(jù)流,一般我們也不會在子組件里面修改父組件傳進(jìn)來的值,但總有需要修改的時候,這篇文章主要介紹了vue中修改props傳進(jìn)來的值,需要的朋友可以參考下
    2022-12-12
  • vue實現(xiàn)鼠標(biāo)移入移出事件代碼實例

    vue實現(xiàn)鼠標(biāo)移入移出事件代碼實例

    這篇文章主要介紹了vue實現(xiàn)鼠標(biāo)移入移出事件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue接通后端api以及部署到服務(wù)器操作

    vue接通后端api以及部署到服務(wù)器操作

    這篇文章主要介紹了vue接通后端api以及部署到服務(wù)器操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue.js iview打包上線后字體圖標(biāo)不顯示解決辦法

    vue.js iview打包上線后字體圖標(biāo)不顯示解決辦法

    這篇文章主要介紹了vue.js iview打包上線后字體圖標(biāo)不顯示解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評論

荔波县| 桦南县| 舟曲县| 洪洞县| 华亭县| 旬邑县| 长顺县| 康保县| 轮台县| 玉环县| 稻城县| 道真| 高清| 游戏| 恩平市| 文山县| 日照市| 安平县| 凌海市| 广灵县| 塔城市| 高碑店市| 博野县| 张掖市| 德清县| 尖扎县| 宜黄县| 辽源市| 武陟县| 离岛区| 银川市| 巨野县| 祁东县| 卢氏县| 华蓥市| 南雄市| 石狮市| 通榆县| 五河县| 泸州市| 于田县|