En la lección de hoy examinaremos a fondo la directiva v-bind
en combinación con los atributos class
y style
, los cuales nos van a permitir aprender a agregar y quitar clases y estilos de CSS de forma dinámica y reactiva utilizando por supuesto Vue.js.
Notas
En Vue.js 2 NO podemos colocar clases en nuestros elementos HTML usando interpolaciones.
<!-- Esto no funciona --> <div v-if="vue.years < 2" class="form-group {{ descriptionError != '' ? 'has-error' : ''}}"> ... </div>
Especificando un objeto dentro de la directiva v-bind:class
podemos agregar estilos de forma dinámica a nuestros elementos.
<!-- La clase has-error se agrega de forma dinamica dependiendo del valor de descriptionError --> <div v-if="vue.years < 2" :class="{ 'form-group': true, 'has-error': descriptionError != null }"> ... </div>
Vue nos permite combinar un atributo class
dinámico (con el uso de v-bind:class
o :class
) y un atributo class
estático. En nuestro ejemplo anterior, la clase form-group es estática (siempre estará presente), por lo tanto podemos simplificar nuestro código de la siguiente manera:
<div v-if="vue.years < 2" class="form-group" :class="{ 'has-error': descriptionError }"> .... </div>
:class
es la versión corta de v-bind:class
El valor de la directiva :class
es una expresión de JavaScript, por lo que podemos usar dentro de esta los datos que tenemos en nuestra instancia de Vue así como también nuestras computed properties:
computed: { ... descriptionFieldClasses: function () { return [ 'form-group', { 'has-error': this.descriptionError } ]; } } <!-- Podemos usar una computed property dentro de la directiva :class --> <div v-if="vue.years < 2" class="form-group" :class="{ descriptionFieldClasses }"> ... </div>
Vue también nos permite hacer uso de la directiva :style
para definir estilos de CSS directamente en nuestros elementos HTML. Dentro de esta directiva, al igual que con la directiva :class
, podemos usar computed properties, métodos o propiedades dentro del objeto data:
computed: { ... descriptionStyles: function () { if (this.descriptionError) { return { color: '#a94442' }; } ... } } <!-- Usamos nuestra computed property dentro de la directiva :style --> <div v-if="vue.years < 2" class="form-group" :style="descriptionStyles"> ... </div>
Las computed properties nos sirven para organizar mejor nuestro código.
Dentro de la directiva :style
también podemos hacer uso de un array que contengan objetos y Vue se encargará de combinarlos por nosotros, dándole preferencia a los objetos en las últimas posiciones del arreglo.
<div v-if="vue.years < 2" class="form-group" :style="[{color: '#44a942'}, descriptionStyles]"> ... </div>
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Mostrar y ocultar elementos usando v-if y v-show con Vue.js 2 Lección siguiente Listado de elementos con v-for en Vue 2