【记录】el-select 已选项禁止删除 el-select编辑时已选择的项不允许删除

背景:最近遇到⼀个需求,页⾯有新增和编辑两个功能,但是编辑的时候只能添加新的选项,不可删除已有的选项。

效果图如下:
在这里插入图片描述

分析:

禁止删除无非就是要做到两个点:

  • el-tag 已选择的不可删除
  • el-option 已选择的不可操作
解决:

第一步:全局自定义一个指令

// directive.js (和main.js同级)
import Vue from 'vue'

Vue.directive('defaultSelect', {
  componentUpdated(el, bindings) {
    const [defaultValues] = bindings.value
    const dealStyle = function (tags) {
      // 因为不可删除原有值,所以原有值的index是不会变的,也就是将前n个tag的close隐藏掉即可。n即已有值的长度defaultValues.length
      tags.forEach((el, index) => {
        if (
          index <= defaultValues.length - 1 &&
          ![...el.classList].includes('select-tag-close-none')
        ) {
          el.style.display = 'none' // close 图标隐藏掉
        }
      })
    }
    // 设置样式隐藏close icon
    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 './directives'

第三步:使用

v-default-select=“[enterpriseIds]” 设置已选择的不可删除
:disabled=“enterpriseIds.includes(item.id)” 设置已选择的不可操作

<el-select
 style="width: 100%"
  multiple
  :disabled="$route.query.enterpriseId"
  v-model='form.enterpriseIds'
  placeholder='请选择'
  v-default-select="[enterpriseIds]"
>
  <el-option
    v-for='item in enterpriseList'
    :disabled="enterpriseIds.includes(item.id)"
    :label='item.name'
    :value='item.id'
    :key='item.id'
  />
</el-select>

data(){
	return {
		form:{},
		enterpriseList:[],
		enterpriseIds:[] // 已选择的值,打开进入编辑页面时赋值即可
	}
}

el-cascader
已选项禁止删除只需要在选择的最后一项加上disabled:true就能实现了。在options数据源上符合条件的项加disabled:true

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值