van-tree-select实现全选功能

6 篇文章 0 订阅
5 篇文章 0 订阅

van-tree-select实现全选功能

  1. 建立一级分类和二级分类id对照表,方便后续操作各个id
  //前提:全部选项的id与一级分类id一致且id长度与二级分类不相同并具备前三个字符相同的规律(后面算法实现的基础)
   data=[{id:101,text:一级分类,children:[
   {id:101,text:'全部'},
   {id:101001,text:'二级分类1'},
   {id:101002,text:'二级分类2'}]
 //建立本地一级分类与二级分类的Id对照表减少后面操作
   data.forEach((item)=>{
     const subIdArr=[]
     item.children.forEach((subItem)=>{
      subIdArr.push(subItem.id)
     })
     this.sortIdMap[item.id]=subIdArr
   })
   //this.sortIdMap格式:{101:[101001,101002,101003],102:[102001,102002,102003]}
  1. 全选功能实现函数
    //全选功能实现算法
    changeCatCodeArray(item) {
      let activeIds=this.currentParams.catCodeArray;
      //触发全选选项
      if((''+item.id).length==3){
        //判断是选择全部还是取消全部
        if(activeIds.includes(item.id)){  //选择全部
          let _arr=activeIds.concat(this.sortIdMap[item.id])
          activeIds = Array.from(new Set(_arr))
          this.currentParams.catCodeArray=activeIds
        }else{ //选择取消全部
          this.sortIdMap[item.id].forEach((deleteItem)=>{
            activeIds=activeIds.filter(useItem=>useItem!==deleteItem)
          })
          this.currentParams.catCodeArray=activeIds
        }
      }else{
        let parentId=+(''+item.id).substring(0,3);
        if(activeIds.includes(item.id)){  //选择此分类 
          this.sortIdMap[parentId]=this.sortIdMap[parentId].filter(item=>item!==parentId) //剔除父节点Id       
          if(this.subsetTo(this.sortIdMap[parentId],activeIds)){
            activeIds.unshift(parentId)
            this.currentParams.catCodeArray=activeIds
          }
        }else{  //取消此分类
          activeIds=activeIds.filter(item=>item!==parentId) //取消对应的全选
          this.currentParams.catCodeArray=activeIds
        }
      }
    },
    //数组子集判断方法	
    subsetTo(arr1,arr2){
       return arr1.every(v=>arr2.includes(v))
    }
//注:this.currentParams.catCodeArray绑定van-tree-select的active-id.sync
//:active-id.sync="currentParams.catCodeArray"
//@click-item ="changeCatCodeArray" 点击二级分类选项时触发
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
van-tree-select是一个基于Vue.js的树形选择器组件,可以用于分类选择等场景。下面是van-tree-select的使用方法: 1. 引入van-tree-select组件和所需样式: ```html <template> <div> <van-tree-select :items="items" :active-id.sync="activeId" :main-active-index.sync="mainActiveIndex" @click-nav="onClickNav" /> </div> </template> <script> import { TreeSelect } from 'vant'; export default { components: { [TreeSelect.name]: TreeSelect, }, data() { return { activeId: 2, mainActiveIndex: 0, items: [ { // 标题 text: '所有城市', // 禁用选项 disabled: true, // 当前分组下面的所有选项 children: [ { // 选项文案 text: '北京市', // 选项id,选中时传递的值 id: 1, }, { text: '上海市', id: 2, }, ], }, ], }; }, methods: { onClickNav({ detail = {} }) { this.mainActiveIndex = detail.index || 0; }, }, }; </script> ``` 2. 在需要使用van-tree-select的页面中引入组件: ```html <template> <div> <van-tree-select :items="items" :active-id.sync="activeId" :main-active-index.sync="mainActiveIndex" @click-nav="onClickNav" /> </div> </template> <script> import { TreeSelect } from 'vant'; export default { components: { [TreeSelect.name]: TreeSelect, }, data() { return { activeId: 2, mainActiveIndex: 0, items: [ { // 标题 text: '所有城市', // 禁用选项 disabled: true, // 当前分组下面的所有选项 children: [ { // 选项文案 text: '北京市', // 选项id,选中时传递的值 id: 1, }, { text: '上海市', id: 2, }, ], }, ], }; }, methods: { onClickNav({ detail = {} }) { this.mainActiveIndex = detail.index || 0; }, }, }; </script> ``` 3. 在组件中设置所需参数,例如:items、active-id、main-active-index等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值