vue3.x:自定义指令
依据文档能够晓得3.x的指令比起2.x做了些改变,自定义指令的 API 改了名字,名字更贴近组件的生命周期。
- created - 新的!在元素的 attribute 或事件侦听器利用之前调用。
- bind → beforeMount
- inserted → mounted
- beforeUpdate:新的!这是在元素自身更新之前调用的,很像组件生命周期钩子。
- update → 移除!有太多的相似之处要更新,所以这是多余的,请改用
updated
。 - componentUpdated → updated
- beforeUnmount:新的!与组件生命周期钩子相似,它将在卸载元素之前调用。
- unbind -> unmounted
对于2.x中自定义指令里的一些办法名与底层做了些改变
3.x的自定义指令对象相似上面的样子
const MyDirective = { beforeMount(el, binding, vnode, prevVnode) {}, mounted() {}, beforeUpdate() {}, // 新 updated() {}, beforeUnmount() {}, // 新 unmounted() {}}
上面依据官网的例子实现一个进入页面主动聚焦input的指令
组件内申明
在组件外部,与data同级应用
<template> <input v-focus></template><script>export default { data () { return { } }, directives: { focus: { // 指令的定义 mounted (el) { el.focus() } } }}</script>
全局申明
在main.js申明
留神:要在挂载前
import { createApp} from 'vue'import App from './App.vue'const app = createApp(App)app.directive('focus', { // 当被绑定的元素挂载到 DOM 中时…… mounted (el) { // 聚焦元素 el.focus() }})app.mount('#app')// createApp(App).mount('#app')