详解为element-ui的Select和Cascader添加弹层底部操作按钮


Posted in Javascript onFebruary 07, 2020

如下图这样把操作按钮放在select弹层底部是一种挺常见的设计方式

详解为element-ui的Select和Cascader添加弹层底部操作按钮

但是很遗憾element-ui没有给我们提供这个插槽,我们想实现这个功能只能重写组件或者等官方更新吗,答案当然是否定的!

花了一点时间通过一个函数实现这个功能,支持el-selectel-cascader,效果点击预览

详解为element-ui的Select和Cascader添加弹层底部操作按钮

详解为element-ui的Select和Cascader添加弹层底部操作按钮

其实逻辑很简单,把下面这段html插入到指定位置就行了

<ul class="el-cascader-menu__list" style="border-top: solid 1px #E4E7ED;padding:0">
 <li class="el-cascader-node" style="height:38px;line-height: 38px">
  <i class="el-icon-plus"></i>
  <span class="el-cascader-node__label">新增商品分类</span>
  <i class="el-icon-arrow-right el-cascader-node__postfix"/>
 </li>
</ul>

我这里直接使用el-cascader的样式,实际使用中这段html可以根据自己的需求修改
上代码,在methods写入这段函数

/**
 * 为element-ui的Select和Cascader添加弹层底部操作按钮
 * @param visible
 * @param refName 设定的ref名称
 * @param onClick 底部操作按钮点击监听
 */
visibleChange(visible, refName, onClick) {
 if (visible) {
  const ref = this.$refs[refName];
  let popper = ref.$refs.popper;
  if (popper.$el) popper = popper.$el;
  if (!Array.from(popper.children).some(v => v.className === 'el-cascader-menu__list')) {
   const el = document.createElement('ul');
   el.className = 'el-cascader-menu__list';
   el.style = 'border-top: solid 1px #E4E7ED; padding:0; color: #606266;';
   el.innerHTML = `<li class="el-cascader-node" style="height:38px;line-height: 38px">
<i class="el-icon-menu"></i>
<span class="el-cascader-node__label">商品分类管理</span>
<i class="el-icon-arrow-right el-cascader-node__postfix"/>
</li>`;
   popper.appendChild(el);
   el.onclick = () => {
    // 底部按钮的点击事件 点击后想触发的逻辑也可以直接写在这
    onClick && onClick();

    // 以下代码实现点击后弹层隐藏 不需要可以删掉
    if (ref.toggleDropDownVisible) {
     ref.toggleDropDownVisible(false);
    } else {
     ref.visible = false;
    }
   };
  }
 }
},

el-selectel-cascader的调用方式一致,这里以el-cascader举例

<el-cascader
  :options="cascaderOptions"
  v-model="cascaderValue"
  @visible-change="v => visibleChange(v, 'cascader', cascaderClick)"
  ref="cascader"
/>

如果调用的地方比较多,也可以像我一样封装成mixins

const selectBottomAction = {
 methods: {
  /**
   * 为element-ui的Select和Cascader添加弹层底部操作按钮
   * @visible-change="v => selectBottomAction(v, {ref: 'select', label: '商品分类' , icon: 'el-icon-menu', click: goodsTypeManagement})"
   * @param visible
   * @param ref   设定的ref名称
   * @param click  底部操作按钮点击监听
   * @param label  标题
   * @param icon   图标class
   * @param arrow  是否显示箭头
   */
  selectBottomAction(visible, {ref, click, label = '', icon = '', arrow = false}) {
   if (visible) {
    const _ref = this.$refs[ref];
    let popper = _ref.$refs.popper;
    if (popper.$el) popper = popper.$el;
    if (!Array.from(popper.children).some(v => v.className === 'el-cascader-menu__list')) {
     const el = document.createElement('ul');
     el.className = 'el-cascader-menu__list';
     el.style = 'border-top: solid 1px #E4E7ED; padding: 0; color: #606266;';
     el.innerHTML = `<li class="el-cascader-node" style="height:38px;line-height: 38px">
     ${icon ? `<i class="${icon}"></i>` : ''}
     <span class="el-cascader-node__label">${label}</span>
     ${arrow ? '<i class="el-icon-arrow-right el-cascader-node__postfix"/>' : ''}
     </li>`;
     popper.appendChild(el);
     el.onclick = () => {
      click && click();
      if (_ref.toggleDropDownVisible) {
       _ref.toggleDropDownVisible(false);
      } else {
       _ref.visible = false;
      }
     };
    }
   }
  },
 },
};

export default selectBottomAction;
提示:后期可能会随着官方版本升级失效,谨慎使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中的window.open返回object的错误的解决方法
Aug 15 Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
Jan 28 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
JS中mouseup事件丢失的原因与解决办法
Jun 14 Javascript
vue子父组件通信的实现代码
Jul 09 Javascript
Angular17之Angular自定义指令详解
Jan 21 Javascript
Vue的轮播图组件实现方法
Mar 03 Javascript
vue弹窗消息组件的使用方法
Sep 24 Javascript
p5.js绘制旋转的正方形
Oct 23 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
Aug 13 Javascript
JavaScript实现拖拽和缩放效果
Aug 24 Javascript
vue-cli设置css不生效的解决方法
Feb 07 #Javascript
js生成1到100的随机数最简单的实现方法
Feb 07 #Javascript
JavaScript实现飞舞的泡泡效果
Feb 07 #Javascript
JavaScript实现Excel表格效果
Feb 07 #Javascript
js实现自动播放匀速轮播图
Feb 06 #Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 #Javascript
vue 检测用户上传图片宽高的方法
Feb 06 #Javascript
You might like
php实现读取内存顺序号
2015/03/29 PHP
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
webpack入门必知必会
2017/01/16 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
js new Date()实例测试
2019/10/31 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python生成器(Generator)详解
2015/04/13 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
C语言如何决定使用那种整数类型
2016/11/26 面试题
财务方面个人工作的自我评价
2013/12/28 职场文书
大学生两会学习心得体会
2014/03/10 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
综治宣传月活动总结
2014/04/28 职场文书
销售队伍口号
2014/06/11 职场文书
群众路线领导对照材料
2014/08/23 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
JavaScript流程控制(循环)
2021/12/06 Javascript
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python
详解CSS3浏览器兼容
2022/12/24 HTML / CSS