elemntui Table实现多选+限制选择项+搜索框+保持选中状态

elemntui Table实现多选+限制选择项+搜索框+保持选中状态
实现以下功能:
1、可多选
2、限制多选选项最多可以选择5项
3、有搜索框
4、搜索后选中\取消选择,保持状态
代码实现如下:

//手打的,不是从编辑器里赋值过来的,有些单词可能打错了,样式也去调了
//搜索输入栏
<div>
  <input
    text="text"
    placeholder="请输入搜索项"
    v-modle="search"  
    v-on:input=“searchName”
    />
</div>

//表格
<div class="table"
     <el-table
      ref="table"
      stripe
       :data="showList"
       tooltip-effect="dark"
       max-height="200"
       @selection-change="selectionChange"
       >
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column type="name" label="姓名"></el-table-column>
     </el-table>
 </div>

//直接写涉及到的
data(){
    tableDate:[],
    showList:[],
    selecValue:'',
    searchFlag:false,
    selectedList:[]
},
created(){
    this.showList = [...this.tableDate];  //保持源数据的独立性
},
methods:{
selectionChange (val) {
     this.selectedList = val;
     if(this.searchFlag) {
          return ;
     }
     this.showList.forEach (item => {
         item.checked = false;
     })
     val.forEach (row => {
        row.checked = true;
     });
     //限制选中个数
     if (this.selectedList.length >= 3) {
        this.selectedList = val.slice(0,3);
        let tempArr = val.slice(3);
        if(tempArr.length !== 0){
            temArr.forEach(ele => {
                  this.$refs["table"].toggleRowSelection(ele,false);
                  this.$alert("最多只能选择3个!")
            })
        }
     }
     //如果是组件 需要将最后的选中项给到父组件
     this.$emit('selectedList',this.selectedList);
},
//搜索
searchName(){
//重新记录选中项
this。selectedList = [];
var arr = this.tableDate.filter( data => !this.selecValue || data.username.toLowerCase().includes(this.selectedValue.toLowerCase()));
this.showList.splice(0,this.showList.length);
Array.prototype.push.apply(this.showList,arr);//不改变showList数组的引用
this.$nexttTick( () => {
    this.searchFlag = true;//手动选中前,禁止多选事件响应
    this.showList.forEach( item => {
      if(item.checked){
         this.refs['table'].toggleRowSelection(item,true);
      }
    });
    this.searchFlag = false;//放开所选事件响应
    this.$emit('selectedList',this.selectedList);
})
}
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值