vue点击标签切换选中及互相排斥

单身和已婚不能同时选中,不了解保险和已了解保险不能同时选中。同时各个标签点击可以取消选择
在这里插入图片描述


       //html
        <li>
          <span class="fill-title">与我相关</span>
          <div>
            <van-button
              v-for="(item, index) in myself"
              :key="index"
              @click="checkButton('myself', item.id)"
              :class="item.isFlag ? 'current' : ''"
            >{{item.title}}</van-button>
          </div>
        </li>
        <li>
          <span class="fill-title">标签</span>
          <div>
            <van-button
              v-for="item in biaoqian"
              :key="item.id"
              @click="checkButton('tag', item.id)"
              :class="item.isFlag ? 'current' : ''"
            >{{item.title}}</van-button>
          </div>
        </li>

数据

      myself: [
        { id: 1,title: "亲属", isFlag: false },
        {id: 2,title: "同乡",isFlag: false},
        {id: 3, title: "同学",isFlag: false },
        {id: 4,title: "同事", isFlag: false},],
      biaoqian: [
        {id: 1, title: "已婚",type: 1,isFlag: false },
        {id: 2,title: "单身",type: 1,isFlag: false },
        {id: 3,title: "有娃",isFlag: false },
        {id: 4,title: "有房", isFlag: false },
        {id: 5,title: "有车",isFlag: false},
        {id: 6,title: "不了解保险",isFlag: false,type: 2},
        {id: 7,title: "已了解保险",isFlag: false,type: 2} ],

js

    //标签只能选中一个
    filterData(arr = [], index) {
      let val = "";
      arr.forEach(item => {
        if (item.id == index) {
          item.isFlag = !item.isFlag;
          val = item.isFlag ? item.title : "";
        } else {
          item.isFlag = false;
        }
      });
      return val;
    },
    checkButton(val, index) {
      if (val === "tag") {
        let data = [];
        this.biaoqian.forEach(item => {
          if (item.id == index) {
            // a 记录当前标签状态是否选中,为了取消标签状态
            let a = item.isFlag;
            item.isFlag = !item.isFlag;
            if (item.type) {
              this.biaoqian.forEach(e => {
                if ((e.type == 1 && index < 3) || (e.type == 2 && index > 5)) {
                  //先把同一个类型的标签都置为false
                  e.isFlag = false;
                  if (e.id == index) {
                    e.isFlag = a ? false : !e.isFlag;
                  }
                }
              });
            }
          }
        });
        let arr = this.biaoqian.filter(item => {
          return item.isFlag;
        });
        arr.forEach(item => {
          data.push(item.title);
        });
        this.personItem.labelList = data;
      } else if (val === "sex") {
        this.personItem.sex = this.filterData(this.sexArr, index);
      } else {
        this.personItem.relation = this.filterData(this.myself, index);
      }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值