el-select 下拉框多選實現(xiàn)全選的實現(xiàn)
在寫一個功能時發(fā)現(xiàn)el-select支持多選,但是竟然不支持全選,好無語哦,那就自己實現(xiàn)一下吧~有兩種方法,第二種感覺簡單些
方法一:下拉項增加一個【全選】,然后應(yīng)該有以下幾種情況:
- 下拉選項全都勾選時,【全選】自動勾選;
- 下拉選項部分勾選時,點擊【全選】后,所有下拉項全部勾選;
- 下拉選項全都未勾選時,點擊【全選】后,所有下拉選項不勾選;
- 下拉選項和【全選】都選上的時候,不勾選任意下拉選項,【全選】按鈕就不勾選了;
上面就是我要實現(xiàn)的功能,我好啰嗦。。。還是看代碼吧。。。
html部分:
<template> <el-select multiple collapse-tags v-model='selectedArray' @change='changeSelect' @remove-tag='removeTag' placeholder='請選擇'> <el-option label='全選' value='全選' @click.native='selectAll'></el-option> <el-option v-for='(item, index) in options' :key='index' :label='item.name' :value='item.name'></el-option> </el-select> </template>
js部分:
export default { data() { return { selectedArray: [], options: [ { name: '一一', label: 'one' }, { name: '二二', label: 'tow' }, { name: '三三', label: 'three' }, { name: '四四', label: 'four' }, { name: '五五', label: 'five' } ] } }, methods: { selectAll() { if (this.selectedArray.length < this.options.length) { this.selectedArray = [] this.options.map((item) => { this.selectedArray.push(item.name) }) this.selectedArray.unshift('全選') } else { this.selectedArray = [] } }, changeSelect(val) { if (!val.includes('全選') && val.length === this.options.length) { this.selectedArray.unshift('全選') } else if (val.includes('全選') && (val.length - 1) < this.options.length) { this.selectedArray = this.selectedArray.filter((item) => { return item !== '全選' }) } }, removeTag(val) { if (val === '全選') { this.selectedArray = [] } } } }
看看效果圖:
方法二:直接添加一個【全選】復(fù)選框,實現(xiàn)的功能跟方法一是一樣的
html部分:
<template> <el-select multiple collapse-tags v-model='selectedArray' @change='changeSelect' placeholder='請選擇'> <el-checkbox v-model="checked" @change='selectAll'>全選</el-checkbox> <el-option v-for='(item, index) in options' :key='index' :label='item.name' :value='item.name'></el-option> </el-select> </template>
js部分:
export default { data() { return { checked: false, selectedArray: [], options: [ { name: '一一', label: 'one' }, { name: '二二', label: 'tow' }, { name: '三三', label: 'three' }, { name: '四四', label: 'four' }, { name: '五五', label: 'five' } ] } }, methods: { selectAll() { this.selectedArray = [] if (this.checked) { this.options.map((item) => { this.selectedArray.push(item.name) }) } else { this.selectedArray = [] } }, changeSelect(val) { if (val.length === this.options.length) { this.checked = true } else { this.checked = false } } } }
css:
.el-checkbox { text-align: right; width: 100%; padding-right: 10px; }
效果圖:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue.js 2.0窺探之Virtual DOM到底是什么?
大家可能聽說Vue.js 2.0已經(jīng)發(fā)布,并且在其中新添加如了一些新功能。其中一個功能就是“Virtual DOM”。那么下面這篇文章就來給大家詳細介紹Vue.js 2.0中的Virtual DOM到底是什么?需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02Vue3.2?新增指令?v-memo?用法詳解(提高性能利器)
v-memo 接受一個依賴的數(shù)組,依賴的數(shù)組變化,v-memo 所對應(yīng)的 DOM 包括子集將會重新渲染,這篇文章主要介紹了Vue3.2?新增指令?v-memo?用法,提高性能的又一利器,需要的朋友可以參考下2022-09-09關(guān)于Vue中keep-alive的作用及使用方法
keep-alive是Vue的內(nèi)置組件,當它包裹動態(tài)組件時,會緩存不活動的組件實例,該組件將不會銷毀,這篇文章主要介紹了關(guān)于Vue中keep-alive的作用是什么?怎么使用,需要的朋友可以參考下2023-04-04