ElementUI Tag标签的一些问题及解决方法

今天第一次在项目中用到 Tag 标签,使用前先根据官方文档写了一个小 demo,实现可移除的标签效果:

在这里插入图片描述
官方代码示例是这样的:

<template>
  <div>
    <el-tag
      :key="tag"
      v-for="tag in dynamicTags"
      closable
      :disable-transitions="false"
      @close="handleClose(tag)"
    >
      {{ tag }}
    </el-tag>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dynamicTags: ['标签一', '标签二', '标签三']
    }
  },
  methods: {
    handleClose(tag) {
      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1)
    }
  }
}
</script>

<style scoped lang="scss">
  .el-tag + .el-tag {
    margin-left: 10px;
  }
</style>

在网页上试一下是没问题的:

在这里插入图片描述
然而,我不经意间瞄到了 handleClose 中写的方法,觉得有点不对,用 indexOf 来确定位置的话,如果 tag 的名字重复,是不是就有问题了呢,于是我给 dynamicTags 加了一个 “标签一”:

data() {
  return {
    dynamicTags: ['标签一', '标签二', '标签三', '标签一']
  }
}

再到网页试试效果:

在这里插入图片描述
是不是出现了两个问题…第一个问题是我删除最后一个“标签一”,却把第一个“标签一”给删掉了;第二个问题是删除的动画好像有点问题;还有一个问题是页面会报错,因为有两个“标签一”,所以 key 值重复了。那么我们来一个一个解决:

首先是第一个删除的问题,这个一看就是逻辑的问题,官方文档示例中的方法如果遇到标签名一样的情况,肯定会出错,这里对 Tag 的 close 事件做一个修改;然后 key 值报错的问题,把 key 值修改一下让它成为唯一值就好了:

<template>
  <div>
    <el-tag
      :key="tag + index"
      v-for="(tag, index) in dynamicTags"
      closable
      :disable-transitions="false"
      @close="tag => handleClose(tag, index)"
    >
      {{ tag }}
    </el-tag>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dynamicTags: ['标签一', '标签二', '标签三', '标签一']
    }
  },
  methods: {
    handleClose(tag, index) {
      this.dynamicTags.splice(index, 1)
    }
  }
}
</script>

改成了用下标 index 来确定位置的方式,现在效果如下:

在这里插入图片描述
可以看到删除最后一个“标签一”,第一个“标签一”不会受影响了。但是如果没有从最后一个标签开始删的话,动画的问题又会出现了:

在这里插入图片描述
这个频闪的问题查了半天也不知道是什么问题,本人暂时无法解决,直接一劳永逸把动画效果关了:

:disable-transitions="true"

如果有大佬知道原因的,欢迎交流 ~

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大杯美式不加糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值