Checkboxes no Vue.js
Checkboxes representam elementos de controle que podem estar em dois estados: marcado ou desmarcado. Quando a diretiva v-model é aplicada em checkboxes, ela conecta o atributo checked a uma propriedade do Vue e monitora alterações por meio do evento change. Por padrão, o estado marcado corresponde ao valor true e o desmarcado ao valor false.
No exemplo a seguir, um checkbox simples está vinculado a um valor booleano:
<!DOCTYPE html>
<html>
  <head>
    <title>Explorando Vue.js</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <script src="https://unpkg.com/vue"></script>
    <div id="app">
      <input type="checkbox" id="checkbox" v-model="checked" />
      <label for="checkbox">{{ checked }}</label>
    </div>
    <script>
      Vue.createApp({
        data() {
          return {
            checked: true,
          };
        },
      }).mount("#app");
    </script>
  </body>
</html>O estado marcado é vinculado ao valor true, enquanto o desmarcado é vinculado ao valor false.

Checkbox com Valores Personalizados
É possível configurar valores personalizados para os estados marcado e desmarcado por meio dos atributos true-value e false-value:
<script src="https://unpkg.com/vue"></script>
<div id="app">
  <input type="checkbox" v-model="light" true-value="on" false-value="off" />
  <span v-if="light === 'on'">Desligar</span>
  <span v-else>Ligar</span>
</div>
<script>
  Vue.createApp({
    data() {
      return {
        light: "on",
      };
    },
  }).mount("#app");
</script>Neste exemplo, o estado marcado corresponde ao valor "on" e o desmarcado ao valor "off". A propriedade light armazena o valor atual e pode ser avaliada diretamente em expressões como light === 'on'.

Checkbox com Array
Multiplos checkboxes podem ser vinculados a um array. Nesse caso, ao marcar um checkbox, seu valor é adicionado ao array, e ao desmarcá-lo, ele é removido:
<!DOCTYPE html>
<html>
  <head>
    <title>Explorando Vue.js</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <script src="https://unpkg.com/vue"></script>
    <div id="app">
      <input type="checkbox" value="Tom" v-model="selectedUsers" />
      <label>Tom</label><br />
      <input type="checkbox" value="Bob" v-model="selectedUsers" />
      <label>Bob</label><br />
      <input type="checkbox" value="Sam" v-model="selectedUsers" />
      <label>Sam</label><br />
      <span>Selecionados: {{ selectedUsers }}</span>
    </div>
    <script>
      Vue.createApp({
        data() {
          return {
            selectedUsers: [],
          };
        },
      }).mount("#app");
    </script>
  </body>
</html>Neste exemplo, os valores dos checkboxes ("Tom", "Bob", "Sam") são adicionados ao array selectedUsers conforme selecionados.

Checkbox com Objeto
Outra opção é vincular checkboxes a um objeto. Nesse caso, O atributo v-bind:value é usado para vincular dinamicamente um checkbox a um objeto:
<!DOCTYPE html>
<html>
  <head>
    <title>Explorando Vue.js</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <script src="https://unpkg.com/vue"></script>
    <div id="app">
      <template v-for="user in users">
        <input type="checkbox" v-bind:value="user" v-model="selectedUsers" />
        <label>{{ user.name }}</label><br />
      </template>
      <ul>
        <li v-for="user in selectedUsers">{{ user.name }} - {{ user.age }}</li>
      </ul>
    </div>
    <script>
      Vue.createApp({
        data() {
          return {
            users: [
              { name: "Tom", age: 22 },
              { name: "Bob", age: 25 },
              { name: "Sam", age: 28 },
            ],
            selectedUsers: [],
          };
        },
      }).mount("#app");
    </script>
  </body>
</html>Neste exemplo, os valores dos checkboxes são objetos com as propriedades name e age que são adicionados ao array selectedUsers ao serem selecionados.

Documentação oficial: