使用vue指令实现max-collapse-tags

文章介绍了如何在不支持element-ui新版本的老项目中,通过自定义Vue指令v-selectShowLimit来实现max-collapse-tags的效果。该指令在选择标签过多时进行隐藏,限制显示数量,并添加提示信息,以保持界面整洁。
摘要由CSDN通过智能技术生成

使用vue指令实现max-collapse-tags

前言

当下拉内容选择过多时往往会造成高度太高,看起来有点突兀,右图对其进行了隐藏
这需要用到element的collapse-tagsmax-collapse-tags

不过max-collapse-tags是element-ui(2.3.0)推出的新属性,下文照猫画虎使用vue指令的形式模仿这个属性以在老项目中使用
在这里插入图片描述

实现效果

在这里插入图片描述

注册指令

// 指令 v-selectShowLimit 方法
function showLimitFun(el,binding){
  setTimeout(() => {
    let tagWrap = el.querySelector(".el-select__tags>span");
    // 溢出隐藏
    for( let i=0;i<tagWrap.children.length;i++ ){
      if( (i+1) > binding.value ){
        tagWrap.children[i].style.display = "none";
      }else{
        tagWrap.children[i].style.display = "flex";
      }
    }
    // 改tag显示隐藏
    let selShowLimitTip = el.querySelector(".selShowLimitTip");
    if( tagWrap.children.length > binding.value ){
      selShowLimitTip.style.display="inline-block";
    }else{
      selShowLimitTip.style.display="none";
    }
    // 改tag内容
    selShowLimitTip.innerHTML = `+ ${( tagWrap.children.length - binding.value )}`;
    // 改高度
    let ipt = el.querySelector(".el-input__inner");
    let c = tagWrap.children.length > binding.value ? binding.value : tagWrap.children.length;
    ipt.style.height= ( 30 * c ) + ( 28 )  + "px";
  }, 200);
}

// 注册指令
app.directive("selShowLimit", {
  // inserted、created
  inserted: function (el, binding) {
    let tagWrap = el.querySelector(".el-select__tags>span");
    // 添加tag
    tagWrap.insertAdjacentHTML("afterend", `<span class="selShowLimitTip" 
      style="
      display: inline-block;
      line-height:28px;
      margin-left:6px;
      background-color:#F0F2F5;
      color:#909399;
      border-radius:4px;
      padding:0px 5px 0px 9px;
      font-size:14px;
      "
    ></span>`)
    tagWrap.insertAdjacentHTML("afterend","<section style='width:100%'></section>");
    showLimitFun(el, binding);
  },
  // update、updated
  update: showLimitFun
})

使用

<el-select
  v-model="form.productId"
  placeholder="请选择商品"
  clearable
  filterable
  multiple
  v-selShowLimit="3"
>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值