vue中自定义局部、全局指令
文章类型:Vue
发布者:admin
发布时间:2023-03-28
vue中允许自定义指令,局部的自定义指令就只能在当前 .vue 文件中使用,全局的则可以在所有的 .vue 文件中使用,整理一下V2、V3自定义指令的方式
一:Vue3中的局部和全局指令
1:局部指令,必须是v开头
<input type="text" v-model="value" v-focus>
<script setup>
//直接写,但是必须是v开头
const vFocus = {
mounted(el) {
// 获取input,并调用其focus()方法
el.focus()
}
}
</script>
2:全局指令
A:首先创建js文件,导出自定义指令
const directives = (app) => {
//这里是给元素取得名字,虽然是focus,但是实际引用的时候必须以v开头
app.directive('focus',{
//这里的el就是获取的元素
mounted(el) {
el.focus()
}
})
}
//默认导出 directives
export default directives
B:注册指令,全局引入注册
import directives from './directives'
const app = createApp(App)
directives(app)
C:使用指令
<input type="text" v-model="value" v-focus>
3:钩子函数
A:created:在绑定元素的 attribute 或事件监听器被应用之前调用。在指令需要附加在普通的 v-on 事件监听器调用前的事件监听器中时。
B:beforeMount:当指令第一次绑定到元素并且在挂载父组件之前调用。
C:mounted:在绑定元素的父组件被挂载后调用。
D:beforeUpdate:在更新包含组件的 VNode 之前调用。
E:updated:在包含组件的 VNode 及其子组件的 VNode 更新后调用。
F:beforeUnmount:在卸载绑定元素的父组件之前调
G:unmounted:当指令与元素解除绑定且父组件已卸载时,只调用一次。
二:Vue中的局部和全局指令
1:局部指令,通过关键字directives
directives: {
focus: {
inserted: function (el) {
el.focus();
},
},
2:全局指令,在main.js中直接挂在在Vue上
Vue.directive("focus", {
inserted: function(el) {
el.focus();
}
});
3:使用
<input id="a" v-focus type="text" />
4:钩子函数
A:bind: 初始化只调用一次(dom 未创建就调用)
B:inserted: 初始化调用(dom 创建之后调用)
C:update: 组件更新前调用
D:componentUpdated: 组件更新后调用。
E:unbind: 只调用一次, 指令与元素解绑时调用。