详解为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 相关文章推荐
基于jQuery的倒计时实现代码
May 30 Javascript
treepanel动态加载数据实现代码
Dec 15 Javascript
js使用eval解析json实例与注意事项分享
Jan 18 Javascript
当达到输入长度时表单自动切换焦点
Apr 06 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
JS 拦截全局ajax请求实例解析
Nov 29 Javascript
JS实现太极旋转思路分析
Dec 09 Javascript
Vue组件通信之Bus的具体使用
Dec 28 Javascript
vue实现移动端悬浮窗效果
Dec 01 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
Apr 09 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
Feb 19 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 jQuery
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 读取和编写 XML
2014/11/19 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
php 数据结构之链表队列
2017/10/17 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
prototype 的说明 js类
2006/09/07 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
Exjs 入门篇
2010/04/07 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
js点击选择文本的方法
2015/02/09 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
python调用java的Webservice示例
2014/03/10 Python
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
Python 装饰器深入理解
2017/03/16 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
举例讲解Python常用模块
2019/03/08 Python
进步之星获奖感言
2014/02/22 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
采购员岗位职责范本
2015/04/07 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
Java 数据结构七大排序使用分析
2022/04/02 Java/Android