Bootstrap

vue实现for循环标签多选及取消效果

记录一下实现标签多选并且选中后可以取消选中效果,可以直接复制代码使用(因为这个是h5 vant显示弹窗,如果没安装请自行去掉van-popup)

 html代码


<template>
  <div class="interview">
    <van-popup
      v-model="interviewFeeling"
      position="bottom"
      closeable
      custom-style="height: 20%;"
      bind:close="onClose"
      :round="true"
    >
      <div class="cancel-popup">
        <div class="cancel-popup-title">
          面试记录<span>(求职方不可见)</span>
        </div>
        <div class="cancel-popup-content">标签</div>
        <div class="tags">
          <!-- 主要代码 -->
          <div
            class="tags-select"
            :class="{
              'tags-select-active':
               spanIndex.indexOf(index) > -1
            }"
            v-for="(item, index) in feelingData"
            :key="item.id"
            @click="feelingClick(item, index)"
          >
            {{ item.value }}
          </div>
        </div>
      </div>
    </van-popup>
  </div>
</template>

js代码(主要逻辑)

根据for循环出来的数据的index值去实现多选和再点击取消选中。

<script>
export default {
  data() {
    return {
      spanIndex: [],
      interviewFeeling: true,
      feelingData: [
        { value: '测试1', id: 1 },
        { value: '测试2', id: 2 },
        { value: '测试3', id: 3 }
      ],
    }
  },
  methods: {
    feelingClick(item, index) {
      // 获取你点击时的索引,如果找不到这个索引会为-1
      let arrIndex = this.spanIndex.indexOf(index)
      // 如果没有这个索引,则push进去
      // 有这个索引那么删除掉(取消选中)
      // 上面:class选中颜色同理
      if (arrIndex > -1) {
        this.spanIndex.splice(arrIndex, 1)
      } else {
        this.spanIndex.push(index)
      }
    },
  }
}
</script>

css代码

<style lang="scss" scoped>
.cancel-popup {
  padding: 0.16rem;
  .tags {
    .tags-select {
      background: rgba(238, 238, 238, 0.5);
      border-radius: 0.03rem;
      padding: 0.08rem 0.16rem;
      display: inline-block;
      margin: 0 0.12rem 0.12rem 0;
    }
    .tags-select-active {
      background: rgba(0, 215, 110, 0.2) !important;
      color: #00d76e !important;
    }
  }
  .cancel-popup-content {
    font-size: 14px;
    font-weight: bold;
    color: #333333;
    margin: 0.16rem 0 0.12rem 0;
  }
  .cancel-popup-title {
    font-size: 0.16rem;
    font-weight: bold;
    color: #000000;
    span {
      margin-left: 0.04rem;
      font-size: 0.1rem;
      font-weight: 400;
      color: rgba(0, 0, 0, 0.25);
    }
  }
}
</style>

个人纯原创的公众号:安哥说前端,会分享一些自己在项目上用到的组件、封装、大前端或者业务逻辑知识等,希望大家能关注,谢谢!
本文链接来自自己的公众号文章链接:vue实现标签多选记录一下实现标签多选并且选中后可以取消选中效果https://mp.weixin.qq.com/s?__biz=Mzk0MzM4OTkwMA==&mid=2247483713&idx=1&sn=6034a6e284655b2dc580b7c60e2cbb28&chksm=c335ece2f44265f4f4af3a383d1e09715d94beedf76f90aa1705b0f71a4a1aa672803dda0ac2#rd

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;