详解为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 相关文章推荐
图片自动缩小 点击放大
Jul 07 Javascript
JavaScript CSS 修改学习第四章 透明度设置
Feb 19 Javascript
jQuery.each()用法分享
Jul 31 Javascript
Jquery颜色选择器ColorPicker实现代码
Nov 14 Javascript
图片上传插件jquery.uploadify详解
Nov 15 Javascript
javascript屏蔽右键代码
May 15 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
Mar 14 Javascript
jQuery图片轮播滚动切换代码分享
Apr 20 Javascript
JS+CSS实现带小三角指引的滑动门效果
Sep 22 Javascript
jQuery extend()详解及简单实例
May 06 jQuery
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
Jun 19 Javascript
ES6基础之展开语法(Spread syntax)
Feb 21 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 注释规范
2012/03/29 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
mouse_on_title.js
2006/08/25 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
python suds访问webservice服务实现
2020/06/26 Python
Python列表推导式实现代码实例
2020/09/09 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
学生个人的自我评价分享
2013/11/05 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
文明工地标语
2014/06/16 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
我的收音机情缘
2022/04/05 无线电