解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题


Posted in Javascript onAugust 14, 2020

这是一个项目中常见的需求,el-select 为下拉多选,默认值不可删除,或者指定值不可删除。

实现效果:

解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题

el-select 如下源码中 tag closable 属性为 el-select 的 disabled 属性,所有明显不支持。

解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题

解决思路(从el-select 的角度来考虑,其他组件组合的情况暂不考虑)

想要实现某些选项是不删除,1、需要tag 不可删除,2、options 不可选择

options 不可选择很好实现,只需要给一个disabled属性。tag 不可删除才是关键。下面是我几种解决思路。

1、 watch 进行监听,当操作不可删除的选项时,el-select 绑定的值中 将之前删除的选项重新添加到原来的位置。达到不可删除的效果。(这种方法虽然可以实现,但是tag上还是会有 “x” 会给用户一种误导)

2、使用样式,定位到 tag中,将icon “x” 设置 display:none; 将关闭 按钮隐藏,达到不可删除的效果。

3、复制一份 element-ui 中 el-select 源码 进行少量的修改,给 tag 添加一个 closagle 的属性。达到可控的效果。(这种方式增加了开发维护成本,当项目中 element-ui 升级版本的时候,需要重新对源码赋值一份进行修改)

4、使用 derictive 给 element-ui 中 tag 添加样式,实际上是对思路二的一种实现。

思路是这么一个思路,也对思路1和4进行了实现。但是综合考虑下,还是针对思路4做下记录,感觉有一点点复用意义。其它的参考价值不大。代码如下定义了一个全局的指令,也可以定义在组件里面。

// index.vue
 
 <el-select v-model="ruleForm.ability" multiple placeholder="请选择">
	<el-option
	 v-for="(item, index) in abilityOptions"
	 :key="index"
	 :label="`${item.abilityNameZh}(${item.abilityId})`"
	 :disabled="item.required === 1"
	 :value="item.abilityId">
	</el-option>
 </el-select>
// main.js
 
Vue.directive('defaultSelect', {
 componentUpdated (el, bindings, vnode) {
  // values v-model 绑定值
  // options 下拉选项
  // prop 对应 options 中 的 value 属性
  // defaultProp 默认值判断属性 
  // defaultValue 默认值判断值
  const [values, options, prop, defaultProp, defaultValue] = bindings.value
  // 需要隐藏的标签索引
  const indexs = []
  const tempData = values.map(a => options.find(op => op[prop] === a))
  tempData.forEach((a, index) => {
   if (a[defaultProp] === defaultValue) indexs.push(index)
  })
  const dealStyle = function (tags) {
   tags.forEach((el, index) => {
    if (indexs.includes(index) && ![...el.classList].includes('select-tag-close-none')) {
     el.classList.add('none')
    }
   })
  }
  // 设置样式 隐藏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)
  }
 }
})
// style.css 
.none { display: none; }

补充知识:vue+elementUI+select 选中多个值,我要删除其中的一两个 方法如下

我就废话不多说了,大家还是直接看代码吧~

<el-select value-key="moduleCode"
      multiple filterable
      allow-create default-first-option
      @remove-tag='removeTag'
      v-model="ruleForm.module3" placeholder="请选择权限分类" style="width: 240px">
 <el-option v-for="item in level3" :value="item" :label="item.moduleName" :key="item.moduleCode"></el-option>
</el-select>
methods:{

removeTag(key){
 console.log(key);//获取option中item
}
}

以上这篇解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于JQuery框架的AJAX实例代码
Nov 03 Javascript
jquery获取div宽度的实现思路与代码
Jan 13 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
Apr 07 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
Oct 20 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
Feb 25 Javascript
详解微信小程序开发之下拉刷新 上拉加载
Nov 24 Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 Javascript
小程序实现多选框功能
Oct 30 Javascript
vue自定义指令的创建和使用方法实例分析
Dec 04 Javascript
JS co 函数库的含义和用法实例总结
Apr 08 Javascript
javascript实现前端成语点击验证优化
Jun 24 Javascript
JS如何在不同平台实现多语言方式
Jul 16 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 #Javascript
vue在App.vue文件中监听路由变化刷新页面操作
Aug 14 #Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
Aug 14 #Javascript
在vue中封装方法以及多处引用该方法详解
Aug 14 #Javascript
JS+css3实现幻灯片轮播图
Aug 14 #Javascript
浅谈vue获得后台数据无法显示到table上面的坑
Aug 13 #Javascript
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 #Javascript
You might like
一个取得文件扩展名的函数
2006/10/09 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python算法应用实战之栈详解
2017/02/04 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
农救科工作职责
2013/11/27 职场文书
偷看我的初中毕业鉴定
2014/01/29 职场文书
简历里的自我评价
2014/01/31 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python