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

导读:本篇文章讲解 【记录】el-select 已选项禁止删除 el-select编辑时已选择的项不允许删除,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

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

分析:

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

  • 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64738.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!