解决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 相关文章推荐
javascript 延迟加载技术(lazyload)简单实现
Jan 17 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
Apr 26 Javascript
jQuery.fn和jQuery.prototype区别介绍
Oct 05 Javascript
JS生成随机字符串的多种方法
Jun 10 Javascript
node.js中的path.normalize方法使用说明
Dec 08 Javascript
纯javascript制作日历控件
Jul 17 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
Nov 29 Javascript
详解JavaScript RegExp对象
Feb 04 Javascript
详解利用 Express 托管静态文件的方法
Sep 18 Javascript
Vue 实现手动刷新组件的方法
Feb 19 Javascript
vue中实现回车键登录功能
Feb 19 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
smarty获得当前url的方法分享
2014/02/14 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
Python的Django框架中settings文件的部署建议
2015/05/30 Python
Python selenium 三种等待方式解读
2016/09/15 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python项目跨域问题解决方案
2020/06/22 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
暑期社会实践感言
2014/02/25 职场文书
企业元宵节主持词
2014/03/25 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python