Vue3 自定义指令执行了两次的问题
2024-10-20 15:55:37
下面是我注册全局指令的代码,这是我注册的一个通过 hljs 解析 html -> pre code 的指令,数据是异步获取的:
app.directive("parse-code", (el, binding) => {
// ......
console.log("execute!!!");
});
这样写是没有问题的,控制台打印一下:
执行了两次,我最开始以为是数据异步引起的。第一次:没有获取时执行一次;第二次:获取到了之后更新 DOM 执行了一次。然而,并不是我想的这样。查阅官方文档:
directive("parse-code", {
// 在绑定元素的 attribute 前
// 或事件监听器应用前调用
created() {
console.log("d-created");
},
// 在元素被插入到 DOM 前调用
beforeMount() {
console.log("d-beforeMount");
},
// 在绑定元素的父组件
// 及他自己的所有子节点都挂载完成后调用
mounted() {
console.log("d-mounted");
},
// 绑定元素的父组件更新前调用
beforeUpdate() {
console.log("d-beforeUpdate");
},
// 在绑定元素的父组件
// 及他自己的所有子节点都更新后调用
updated() {
console.log("d-updated");
},
// 绑定元素的父组件卸载前调用
beforeUnmount() {
console.log("d-beforeUnmount");
},
// 绑定元素的父组件卸载后调用
unmounted() {
console.log("d-unmounted");
}
});
指令有钩子函数,在 mounted 钩子函数里面注册指令:
app.directive("parse-code", {
mounted() {
console.log("execute!!!");
}
});
控制台打印一下:
执行了一次,总结:写自定义指令最好写在钩子函数里面,以免多次执行。
最新文章
- 调用AJAX做登陆和注册
- mysql禁用autocommit,以及遇到的问题
- 【mysql】使用脚本对mysql状态进行监控
- loadruner报错:Step download timeout(120 seconds)的一个解决方法
- Neutron LBaaS Service(1)—— Neutron LBaaS Service基本知识
- Microsoft Azure云计算第一步—试用帐户申请
- 机器学习10大经典算法.doc
- Storm官方文档翻译之设置开发环境
- h5drag事件
- bzoj千题计划274:bzoj3779: 重组病毒
- 十六进制字符串转化为十进制值strtoul函数
- html5标签基础
- mysql 存储引擎简介
- mysql定时器设置开机默认自启动
- installation failed with message INSTALL_FAILED_INSUFFICIENT_STORG
- Python虚拟环境的安装与使用
- 关于sql server profiler 监控工具的使用
- Vue 子组件调用父组件方法
- eclipse中增加多个Tomcat
- java Concurrent包学习笔记(五):Semaphore
热门文章
- 【Kafka】Quota配额命令、文档相关概念
- K近邻算法(k-nearest neighbor, kNN)
- Windows Terminal ssh 远程 Linux 和使用 Git
- easygui 之integerbox()、enterbox()、multenterbox() 三种输入函数的使用
- python循环结构之while循环
- vue中单独封装elementui中的Dialog弹框组件
- c语言学习总结(原创)
- [C#]C++/CLI中interior_ptr和pin_ptr的区别
- [cocos2d-x]捕鱼达人鱼和子弹的碰撞检测
- 【Java复健指南15】链表LinkedList及其说明