我们要实现的目的就是一个简单的全选按钮,但是当下方得有一个元素取消选中状态时,全选状态取消,下方的数据都选中时,全选自动选中,再加上一个功能为当下面没有数据,全选按钮不能选择。

解决的思路肯定还是监听数据变化,外加上一条控制可点击不能点击的变量;
直接上代码:

div class="table_list"> 
<table class="" id="table_list" v-loading="loading"> 
<thead class=""> 
<tr> 
<th><input type="checkbox" @click="checkall($event)" ref="allcheck" :disabled='isdisabledFn'>全选</th> 
<th>第一列</th> 
<th>第二列</th> 
<th>第三列</th> 
</tr> 
</thead> 
<tbody> 
<tr v-for="(i,a) in CustomerList"> 
<td><input type="checkbox" :id="a" :value="a" v-model="FrozenList"></td> 
<td>{{i.fri}}</td> 
<td>{{i.sec}}</td> 
<td>{{i.thr}}</td> 
</tr> 
</tbody> 
</table> 
</div> 

<script> 
export default { 
data: function() { 
return { 
isdisabledFn:true, 
CustomerList:[], 
FrozenList:[], 
thischeckall: [] 
}}, 
//监听事件 
watch: { 
FrozenList: { // 监视双向绑定的数组变化 
handler(){ 
if(this.FrozenList.length == this.thischeckall.length){ 
this.$refs.allcheck.checked = true; 
}else { 
this.$refs.allcheck.checked = false; 
} 
}, 
deep: true 
} 
}, 
//监听事件 
methods: { 
 getdata:function(){
 let _this=this;
   _this.thischeckall = [];
          $.each(_data, function(a, b) {
            _this.thischeckall.push(a);
          });
        _this.$refs.allcheck.checked=false;   // 此处上来让全选按钮处于未点击状态
        if(_this.thischeckall.length==0){
          _this.isdisabledFn = true;
        }else{  
          _this.isdisabledFn = false;
        }
 },
 //上面的函数是页面刚开始进来的获取数据的数据,首先判断页面上面的数据,如果数据为空,则全选按钮不能点击
checkall: function(a) {
      if ($(a.target).prop("checked")) {
        this.thischecked = this.thischeckall;
      } else {
        this.thischecked = [];
      }
    }
} 
} 
</script>
Logo

前往低代码交流专区

更多推荐