- Aprender
-
Ecosistema
Ayuda
Herramientas
Librerías Oficiales
Noticias
Lista de Recursos
- Equipo
- Apoyar Vue
- Traducciones
Guía
Conocimientos Esenciales
- Instalación
- Introducción
- La instancia Vue
- Sintaxis de Template
- Propiedades Computadas y Observadores
- Enlace Clases y Estilos
- Renderización Condicional
- Renderizado de lista
- Manejo de eventos
- Binding en Formularios
- Conceptos Básicos de Componentes
Transiciones & Animaciones
- Efectos de Transición
Componentes en Profundidad
- Registro de Componente
- Propiedades
- Eventos personalizados
- Slots
- Componentes Dinámicos & Asíncronos
- Handling Edge Cases
- Transiciones de estado
Reusabilidad & Composición
- Mixins
- Directivas Personalizadas
- Funciones de renderizado & JSX
- Plugins
- Filtros
- Publicación en Producción
Herramientas
- Componentes de un Solo Archivo (Single File Components)
- Testing Unitario
- Soporte TypeScript
Escalando la Aplicación
- Enrutamiento
- Administración del Estado
- Renderizado del lado de Servidor
Funcionamiento Interno
- Reactividad en profundidad
Migraciones
- Migración desde Vue 1.x
- Migración desde Vue Router 0.7.x
- Migración de Vuex 0.6.x a 1.0
Meta Documentación
- Comparación con otros frameworks
- Únete a la comunidad Vue.js!
- Conozca al equipo
Directivas Personalizadas
Introducción
Además del conjunto predeterminado de directivas incluidas en el núcleo (v-model
y v-show
), Vue también le permite registrar sus propias directivas personalizadas. Note que en Vue 2.0, la forma primaria de reutilización y abstracción del código son los componentes; sin embargo, puede haber casos en los que necesite un acceso al bajo nivel al DOM en elementos simples, y aquí es donde las directivas personalizadas seguirían siendo útiles. Un ejemplo sería enfocarse en un elemento input, como este:
Cuando se carga la página, este elemento se enfoca (nota: el atributo nativo autofocus
no funciona en Safari para dispositivos mobiles). De hecho, si no ha hecho clic en nada más desde que visitó esta página, el input de arriba debería estar enfocada ahora. Ahora vamos a construir la directiva que realiza esto:
// Registra una directiva personalizada global llamada `v-focus` |
Si desea registrar una directiva localmente en lugar de lo anterior, los componentes también aceptan una opción directives
:
directives: { |
Luego, en un template, puede usar el nuevo atributo v-focus
en cualquier elemento, como este:
<input v-focus> |
Funciones Hook
Un objeto de definición de directiva puede proveer algunas funciones hook, todas opcionales:
bind
: se llama solo una vez, cuando la directiva se enlaza por primera vez con el elemento. Aquí es donde puede hacer un trabajo de configuración inicial.inserted
: se llama cuando el elemento enlazado se ha insertado en el nodo padre (esto solo garantiza la presencia en el nodo padre, no necesariamente en el documento).update
: se llama después de actualizar el VNode que contiene el componente, pero posiblemente antes de la actualización de sus hijos. El valor de la directiva puede o no haber cambiado, pero usted puede evitar actualizaciones innecesarias comparando los valores actuales con los antiguos (ver abajo, en argumentos en hooks).componentUpdated
: se llama después de que el VNodo del componente que contiene y los VNodos de sus hijos se han actualizado.unbind
: se llama solo una vez, cuando la directiva es desvinculada del elemento.
Exploraremos los argumentos pasados en estas funciones hook (el
, binding
, vnode
, and oldVnode
) en la siguiente sección.
Argumentos en Hooks
Los siguientes argumentos se esperan en las funciones de hook de directivas:
el
: El elemento al que está dirigida la directiva. Esto se puede utilizar para manipular directamente el DOM.binding
: Un objeto que contiene las siguientes propiedades.name
: El nombre de la directiva, sin el prefijov-
.value
: El valor pasado a la directiva. Por ejemplo env-my-directive="1 + 1"
, el valor sería2
.oldValue
: El valor anterior, solo disponible enupdate
ycomponentUpdated
. Está disponible si el valor fue cambiado o no.expression
: La expresión del enlace como un string. Por ejemplo env-my-directive="1 + 1"
, la expresión sería"1 + 1"
.arg
: El argumento pasado a la directiva, si hay alguno. Por ejemplo env-my-directive:foo
, el argumento sería"foo"
.modifiers
: Un objeto que contiene modificadores, si los hay. Por ejemplo env-my-directive.foo.bar
, los modificadores serían{ foo: true, bar: true }
.
vnode
: El nodo virtual producido por el compilador de Vue. Ver el VNode API para más detalles.oldVnode
: El nodo virtual anterior, solo disponible enupdate
ycomponentUpdated
.
Excepto el
, usted debe tratar los otros argumentos como de sólo lectura y nunca modificarlos. Si necesita compartir información entre hooks, es aconsejable utilizar un atributo dataset.
Un ejemplo de una directiva personalizada que usa algunas de estas propiedades:
<div id="hook-arguments-example" v-demo:foo.a.b="message"></div> |
Vue.directive('demo', { |
Forma Abreviada de Funciones
En muchos casos, es posible que desee el mismo comportamiento en bind
y update
, pero no se preocupe por los otros hooks. Por ejemplo:
Vue.directive('color-swatch', function (el, binding) { |
Objetos Literales
Si su directiva necesita varios valores, también puede pasar un objeto literal de JavaScript. Recuerde, las directivas pueden tomar cualquier expresión válida de JavaScript.
<div v-demo="{ color: 'white', text: 'Hola!' }"></div> |
Vue.directive('demo', function (el, binding) { |