vue.js的全选功能

全选功能:

1.首先想要实现全选的功能我们就需要初始全选的状态,这里用到了html中表单的内容:复选框(checkbox)。

2.我们要给全选来初始化状态(变量名:false)同时给原有的数据都要初始状态:比如({tai:false,id:1,name:"苹果",price:8,num:10}),红色的false就是状态,false:是错误的意思,在Vue中是没有选定的意思。

3.接下来我们就需要去用指令v-model去双向绑定状态。

<input type="checkbox" v-model="初始状态变量名" @change="事件名">

4.同时要给全选绑定事件,这里不用v-on:click的原因是它有延迟,切记要用到:change。

5.事件要写在:methods里面,如果数据不止一条的话,就需要用js中的for循环出数组里的所有数据的状态,与全选的状态进行赋值:

 

for(var i=0;i<this.shu.length;i++){
                this.shu[i].数组里状态变量名 = this.全选状态变量名
            }
切记是一个=号,如果写==就不会出来效果。

 

当把所有的选项都选择了,这时候也属于全选,全选就要自动选择上:

1.我要在数组里的复选框添加事件的(v-on:click="事件名"

2.先需要定义一个长度初始值,用来记录数组里的数据状态是否等于true:是对的意思,在Vue中是指选定的意思。

3.同时也是用到了for循环,循环出每一个数据的状态与true进行对比,如果如果相等则长度初始值++,++的意思是+1

4.在进行判断当长度初始值的长度等于整个数组的长度时,这时也是全选了,直接给全选赋值(true)否则就是(false

下面有我写的:(购物车综合案例)有关全选的例题代码(提供参考):

<template>
  <div>
      <h3>购物车综合案例</h3>
      <!-- 以表格的形式渲染出来: -->
      <table border="1px" width="800" cellspacing="0px" align="center">
          <tr>
              <!-- 全选:  绑定状态:绑定事件:-->
              <td><b>全选<input type="checkbox" v-model="quan" @change="all"></b></td>
              <td><b>编号</b></td>
              <td><b>商品名</b></td>
              <td><b>单价</b></td>
              <td><b>数量</b></td>
              <td><b>编辑</b></td>
          </tr>
          <!-- 把数据渲染出来liyongv-for -->
          <tr v-for="(value,i) in shu" :key="i">
              <!-- 绑定状态 -->
              <td><input type="checkbox" v-model="value.tai" @change="call"></td>
              <td>{{value.id}}</td>
              <td>{{value.name}}</td>
              <td>{{value.price}}</td>
              <td>
                  <button @click="value.num++">+</button>
                  {{value.num}}
                  <button @click="value.num>0?value.num--:value.num">-</button>
                </td>
              <td><button @click="del(i)">删除</button></td>
          </tr>
          <tr>
              <td colspan="6">总价:{{qq}}</td>
          </tr>
      </table><br>
      <!--要添加的样式: -->
        添加商品信息<br><br>
        <!-- 进行双向绑定: -->
        编号:<input type="text" v-model="ja.id"><br><br>
        商品名:<input type="text" v-model="ja.name"><br><br>
        单价:<input type="text" v-model="ja.price"><br><br>
        数量:<input type="text" v-model="ja.num"><br><br>
        <!-- 添加事件: -->
        <button @click="add">添加</button>
  </div>
</template>

<script>
export default {
    data(){
        return{
            // 初始化全选的状态:
            quan : false,
            // 初始化要添加的数据:
            ja:{id:0,name:"",price:0,num:0},
            // 添加数据:
            shu:[{tai:false,id:1,name:"苹果",price:8,num:10},
            {tai:false,id:2,name:"香蕉",price:5,num:10},
            {tai:false,id:3,name:"句子",price:6,num:10},
            {tai:false,id:4,name:"梨",price:5.5,num:10},
            {tai:false,id:5,name:"葡萄",price:12,num:10},
            ]
        }
    },
    methods:{
        add(){
            // 添加数据:
            this.shu.push(this.ja)
        },
        del(i){
            // 删除数据:
            this.shu.splice(i,1)
        },
        all(){
            // 进行for循环:
            for(var i=0;i<this.shu.length;i++){
                this.shu[i].tai = this.quan
            }
        },
        call(){
            // 先设定一个长度
            var count = 0;
            // 用循环出数组里的每一个数据的状态:如果都等于true就全选count就++
            for(var i=0;i<this.shu.length;i++){
                // 判断是否等于true
                if(this.shu[i].tai == true){
                    count++
                }
            }
            if(count == this.shu.length){
                this.quan = true
            }else{
                this.quan = false
            }
        }
    },
    computed:{
        qq:function(){
            // 定义一个总价格的初始值:
            var money = 0;
            for(var i=0;i<this.shu.length;i++){
                // 判断是否都勾上了:
                if(this.shu[i].tai == true){
                    money+=this.shu[i].price*this.shu[i].num
                }
            }
            return money
        }
    }
}
</script>

<style>

</style>

 

posted @ 2022-04-30 17:18  tatol  阅读(712)  评论(0)    收藏  举报