前言
最近项目开发中遇到个问题,发现 el-select 多选状态给默认选项值添加 disabled 禁用后,tag 标签还能删除,这显然是不合理的。所以小小做个处理吧!
先来看看效果图吧
实现思路
先注册一个全局自定义指令 v-defaultSelect
import Vue from 'vue'
Vue.directive('defaultSelect', {
bind(el, bindings) {
const [defaultValues] = bindings.value // 获取不可编辑的默认值
// 隐藏默认值的close图标
const dealStyle = function (tags) {
tags.forEach((el, index) => {
if (index <= defaultValues.length - 1 && ![...el.classList].includes('select-tag-close-none')) {
el.style.display = 'none'
}
})
}
// 设置样式隐藏
const tags = el.querySelectorAll('.el-tag__close')
if (tags.length === 0) {
// 初始化tags为空的处理
setTimeout(() => {
const tagTemp = el.querySelectorAll('.el-tag__close')
dealStyle(tagTemp)
})
} else {
dealStyle(tags)
}
}
})
在main.js中的导入
import '@/directive/defaultSelect.js' // 全局指令
在vue中的应用
<template>
<el-select v-defaultSelect="[defaultValues]" v-model="value" multiple placeholder="请选择" style="width: 30%">
<el-option
v-for="item in options"
:value="item.value"
:key="item.value"
:label="item.label"
:disabled="item.disabled"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
value: ['1', '2'],
defaultValues: ['1', '2'],
options: [
{
value: '1',
label: '黄金糕',
disabled: true
},
{
value: '2',
label: '双皮奶',
disabled: true
},
{
value: '3',
label: '蚵仔煎'
},
{
value: '4',
label: '龙须面'
},
{
value: '5',
label: '北京烤鸭'
}
]
}
}
}
</script>
<style lang="scss" scoped></style>