知识点
const myDirective = {
// 在绑定元素的 attribute 前
// 或事件监听器应用前调用
created(el, binding, vnode, prevVnode) {
// 下面会介绍各个参数的细节
},
// 在元素被插入到 DOM 前调用
beforeMount() {},
// 在绑定元素的父组件
// 及他自己的所有子节点都挂载完成后调用
mounted() {},
// 绑定元素的父组件更新前调用
beforeUpdate() {},
// 在绑定元素的父组件
// 及他自己的所有子节点都更新后调用
updated() {},
// 绑定元素的父组件卸载前调用
beforeUnmount() {},
// 绑定元素的父组件卸载后调用
unmounted() {}
}
全局自定义指令
import { createApp } from "vue";
import App from "./App.vue";
const app = createApp(App);
app.directive("defineFocus", {
// 当dom渲染完成后,执行 mounted(el)...
mounted(el) {
console.log("defineFocus 指令");
console.log(el);
el.focus();
},
});
app.mount("#app");
局部自定义指令
方式一
<script>
//局部自定义指令
const defineDir = {
focus:{
mounted(el){
el.focus()
}
}
}
export default {
directives:defineDir,
setup(){}
}
</script>
方式二
<script>
export default {
directives:{
focus:{
mounted(el){
el.focus()
}
}
},
setup(){}
}
</script>
自定义指令参数
<template>
<div v-positionFixed:pos="posData">参数</div>
</template>
<script>
//自定义指令动态参数
const defineDir = {
positionFixed:{
beforeMount(el,binding){
el.style.position = "fixed"
el.style.left = binding.value.left+'px'
el.style.top = binding.value.top + 'px'
}
}
}
export default {
directives:defineDir,
setup(){
const posData = { left:10, top:20 }
return { posData }
}
}
</script>