Directivas personalizadas de Vue3
Además de las directivas centrales predeterminadas (v-model y v-show), Vue también permite registrar directivas personalizadas.
A continuación registramos una directiva global v-focus, cuya función es que el elemento obtenga el foco al cargar la página:
Ejemplo
Pruébalo »
También podemos usar la opción directives en la instancia para registrar directivas locales, de modo que la directiva solo se pueda usar en esta instancia:
Ejemplo
Pruébalo »
Ganchos
Funciones de gancho
La función de definición de directiva proporciona varias funciones de gancho (opcionales):
created: Se llama antes de que se apliquen los atributos o los escuchadores de eventos del elemento enlazado.beforeMount: Se llama la primera vez que la directiva se enlaza al elemento y antes de montar el componente padre.mounted: Se llama después de que el componente padre del elemento enlazado se haya montado.beforeUpdate: Se llama antes de actualizar el VNode del componente contenedor.updated: Se llama después de que el VNode del componente contenedor y los VNode de sus componentes secundarios se hayan actualizado.beforeUnmount: Se llama solo una vez, antes de que el componente padre del elemento enlazado se desmonte.unmounted: Se llama solo una vez, cuando la directiva se desvincula del elemento y el componente padre se ha desmontado.
Ejemplo
Parámetros de las funciones de gancho
Los parámetros de las funciones de gancho son:
el
elEl elemento al que está vinculada la directiva. Esto se puede usar para manipular directamente el DOM.
binding
binding es un objeto que contiene las siguientes propiedades:
instance: La instancia del componente que usa la directiva.value: El valor pasado a la directiva. Por ejemplo, env-my-directive="1 + 1"en ..., el valor es2。oldValue: El valor anterior, solo disponible enbeforeUpdateyupdatedestá disponible en .... Está disponible tanto si el valor ha cambiado como si no.arg: El argumento pasado a la directiva (si lo hay). Por ejemplo, env-my-directive:fooen ..., arg es"foo"。modifiers: El objeto que contiene los modificadores (si los hay). Por ejemplo, env-my-directive.foo.baren ..., el objeto de modificadores es{foo: true,bar: true}。dir: Un objeto que se pasa como argumento al registrar la directiva. Por ejemplo, en la siguiente directiva:
app.directive('focus', {
mounted(el) {
el.focus()
}
})dir será el siguiente objeto:
{
mounted(el) {
el.focus()
}
}
vnode
Un plano del elemento DOM real recibido como parámetro `el`.
prevNode
El nodo virtual anterior, solo disponible en los ganchos `beforeUpdate` y `updated`.
El siguiente ejemplo demuestra el uso de estos parámetros:
Ejemplo
Pruébalo »
A veces no necesitamos otras funciones de gancho, podemos abreviar la función de la siguiente manera:
Vue.directive('ejemplo', function (el, binding) {
// 设置指令的背景颜色
el.style.backgroundColor = binding.value.color
})
La función de directiva puede aceptar todas las expresiones válidas de JavaScript; el siguiente ejemplo pasa un objeto de JavaScript:
Ejemplo
Pruébalo »