解决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 相关文章推荐
仿猪八戒网左下角的文字滚动效果
Oct 28 Javascript
jquery获取元素值的方法(常见的表单元素)
Nov 15 Javascript
一个不错的仿携程自定义数据下拉选择select
Sep 01 Javascript
jQuery中bind()方法用法实例
Jan 19 Javascript
jqGrid用法汇总(全经典)
Jun 28 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
HTML5实现微信拍摄上传照片功能
Apr 21 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
React优化子组件render的使用
May 12 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
Jul 17 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 13 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 大数据量及海量数据处理算法总结
2011/05/07 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
对比分析json及XML
2014/11/28 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
python输出指定月份日历的方法
2015/04/23 Python
Python文件去除注释的方法
2015/05/25 Python
详解Python中类的定义与使用
2017/04/11 Python
python中几种自动微分库解析
2019/08/29 Python
python装饰器的特性原理详解
2019/12/25 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
文员岗位职责
2013/11/09 职场文书
护士演讲稿范文
2014/01/05 职场文书
思想品德课教学反思
2014/02/10 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
淘宝客服工作职责
2014/07/11 职场文书
后勤个人工作总结
2015/02/28 职场文书