解决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 自定义CircleAnimation,Animate方法学习笔记
Jul 10 Javascript
javascript设计模式 封装和信息隐藏(上)
Jul 24 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
AspNet中使用JQuery上传插件Uploadify详解
May 20 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
Dec 08 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
Dec 23 Javascript
JS运动特效之任意值添加运动的方法分析
Jan 24 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
react 父子组件之间通讯props
Sep 08 Javascript
angular4+百分比进度显示插件用法示例
May 05 Javascript
Vue发布项目实例讲解
Jul 17 Javascript
flexible.js实现移动端rem适配方案
Apr 07 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
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
php查询及多条件查询
2017/02/26 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
通过JAVAScript实现页面自适应
2007/01/19 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
python读写LMDB文件的方法
2018/07/02 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
幼儿园大班毕业感言
2014/02/06 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
给校长的建议书400字
2014/05/15 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2015党建工作简报
2015/07/21 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android