1. 程式人生 > >vue三種方式實現:全選、反選、全不選

vue三種方式實現:全選、反選、全不選

方法一:v-model 與 [{checked:true},…]

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <div id="app">
    <button @click="checkAnti">反選</button>
    <button @click="checkAll">全選</button>
    <button @click="checkNone">全不選</button>

    喜好:
    <div v-for="item in inputArr">
      {{item.text}} : <input type="checkbox" value="" v-model="item.checked">
    </div>

  </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  new Vue({
    el: "#app",
    data: function () {
      return {
        inputArr: [
          { text: '足球', checked: true },
          { text: '籃球', checked: false },
          { text: '羽毛球', checked: false },
          { text: '游泳', checked: false },
        ],
      }
    },
    methods: {
      checkNone() {
        this.inputArr.forEach(item => {
          item.checked = false;
        });
      },
      checkAll() {
        this.inputArr.forEach(item => {
          item.checked = true;
        });
      },
      checkAnti() {
        this.inputArr.forEach(item => {
          item.checked = !item.checked;
        });
      }
    }
  })
</script>

</html>

方法二: v-model結合v-for,遍歷[true,false,…]

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <div id="app">
    <button @click="checkAnti">反選</button>
    <button @click="checkAll">全選</button>
    <button @click="checkNone">全不選</button>

    喜好:
    <div v-for="(item,idx) in checkArr">
      <input type="checkbox" value="" :checked="checkArr[idx]">
    </div>

  </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  new Vue({
    el: "#app",
    data: function () {
      return {
        checkArr: [true, false, false, false],
      }
    },
    methods: {
      checkNone() {
        this.checkArr = this.checkArr.map(item => item = false);
        
        // ps:this.checkArr.forEach(item => item = false);無效,求大神解答~
      },
      checkAll() {
        this.checkArr = this.checkArr.map(item => item = true);
      },
      checkAnti() {
        this.checkArr = this.checkArr.map(item => item = !item);
      }
    }
  })
</script>

</html>

方法三.利用複選框checked屬性

ps:分別繫結兩種資料結構,都可以實現哦

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <div id="app">
    <button @click="checkAnti">反選</button>
    <button @click="checkAll">全選</button>
    <button @click="checkNone">全不選</button>

    喜好:
   
    <!-- <div v-for="(item,idx) in checkArr">
      <input type="checkbox" value="" :checked="checkArr[idx]">
    </div> -->

    <div v-for="(item,idx) in inputArr">
      <input type="checkbox" value="" :checked="item.checked">
    </div>

  </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  new Vue({
    el: "#app",
    data: function () {
      return {
        inputArr: [
          { text: '足球', checked: true },
          { text: '籃球', checked: false },
          { text: '羽毛球', checked: false },
          { text: '游泳', checked: false },
        ],

        // checkArr: [true, false, false, false],
      }
    },
    methods: {
      checkNone() {
        this.inputArr.forEach(item => {
          item.checked = false;
        });

        // this.checkArr = this.checkArr.map(item => item = false); 
      },
      checkAll() {
        this.inputArr.forEach(item => {
          item.checked = true;
        });

        // this.checkArr = this.checkArr.map(item => item = true); 
      },
      checkAnti() {
        this.inputArr.forEach(item => {
          item.checked = !item.checked;
        });

        // this.checkArr = this.checkArr.map(item => item = !item); 
      }
    }
  })

</script>

</html>