# Formularios

Una parte esencial de todo proyecto son los formularios, por ende vamos a jugar!

# Opcional

Configuraré un navbar con Bootstrap 4 pero es 100% opcional:

<template>
  <div class="navbar navbar-dark bg-dark">
    <router-link to="/" class="navbar-brand">APP</router-link>
    <div class="d-flex">
        <router-link to="/" class="btn btn-dark">Tareas</router-link>
    </div>
  </div>
</template>
// App.vue
<template>
  <div class="container mt-2">
    <Navbar />
    <router-view/>
  </div>
</template>

<script>
import Navbar from './components/Navbar'
export default {
  components: {
    Navbar
  }
}
</script>

# v-model

https://v3.vuejs.org/guide/forms.html#form-input-bindings (opens new window)

Puede usar la v-model directiva para crear enlaces de datos bidireccionales en la entrada de formulario, área de texto y elementos seleccionados.

<template>
  <form class="mt-3">
    <input 
      type="text" 
      placeholder="Nombre Tarea"
      class="form-control"
      v-model="nombre"
    >
  </form>
  <div>
    <p>{{nombre}}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      nombre: ''
    }
  },
}
</script>

Objeto:

<template>
  <form class="mt-3">
    <input 
      type="text" 
      placeholder="Nombre Tarea"
      class="form-control"
      v-model="tarea.nombre"
    >
  </form>
  <div>
    <p>{{tarea}}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tarea: {nombre: ''}
    }
  },
}
</script>

# checkbox

<!-- checkbox -->
<div class="my-2">
  <div class="form-check form-check-inline">
    <input 
      type="checkbox"
      class="form-check-input"
      id="check-1"
      v-model="tarea.categoria"
      value="Javascript"
    >
    <label 
      for="check-1"
      class="form-check-label"
    >Javascript</label>
  </div>
  <div class="form-check form-check-inline">
    <input 
      type="checkbox"
      class="form-check-input"
      id="check-2"
      v-model="tarea.categoria"
      value="Desarrollo"
    >
    <label 
      for="check-2"
      class="form-check-label"
    >Desarrollo web</label>
  </div>
</div>

# Radio

<!-- radio -->
<div class="my-2">
  <div class="form-check form-check-inline">
    <input 
      class="form-check-input" 
      type="radio" 
      id="inlineRadio1" 
      value="urgente"
      v-model="tarea.estado"
    >
    <label class="form-check-label" for="inlineRadio1">
      Urgente
    </label>
  </div>

  <div class="form-check form-check-inline">
    <input 
      class="form-check-input" 
      type="radio" 
      id="inlineRadio2" 
      value="relax"
      v-model="tarea.estado"
    >
    <label class="form-check-label" for="inlineRadio2">
      Relax
    </label>
  </div>
</div>

# Number

<div class="my-2">
  <input 
    type="number"
    class="form-control"
    placeholder="numero"
    v-model.number="tarea.numero"
  >
</div>

# Trim

Si desea que los espacios en blanco de la entrada del usuario se recorten automáticamente

<input 
  type="text" 
  placeholder="Nombre Tarea"
  class="form-control"
  v-model.trim="tarea.nombre"
>

# Submit

@submit.prevent="procesarFormulario"
methods: {
  procesarFormulario(){
    if(this.tarea.nombre.trim() === ''){
      console.log('nombre Vacío')
      return
    }
    console.log(this.tarea)
  }
}

# Disabled

computed: {
  bloquear(){
    return this.tarea.nombre.trim() === '' ? true : false
  }
}
<button 
  class="btn btn-block btn-dark" 
  type="submit"
  :disabled="bloquear"
>
  Agregar
</button>

# Limpiar

methods: {
  procesarFormulario(){
    if(this.tarea.nombre.trim() === ''){
      console.log('nombre Vacío')
      return
    }
    console.log(this.tarea)
    this.tarea = {nombre: '', categoria: [], estado: '', numero: 0}
  }
},
Last Updated: 12/3/2022, 9:51:20