mirror of
https://github.com/certd/certd.git
synced 2026-06-19 07:57:31 +08:00
25 lines
655 B
TypeScript
25 lines
655 B
TypeScript
import { onActivated, onMounted } from "vue";
|
||
|
||
/**
|
||
* 可靠的页面刷新钩子:
|
||
* - 如果组件实际被 KeepAlive 缓存命中,由 onActivated 触发 init;
|
||
* - 如果没有被缓存,由 onMounted 兜底触发,避免不刷新也不触发 onActivated。
|
||
*/
|
||
export function useMounted(init: () => void | Promise<void>) {
|
||
let activated = false;
|
||
|
||
onActivated(() => {
|
||
activated = true;
|
||
init();
|
||
});
|
||
|
||
onMounted(() => {
|
||
// 让 onActivated 有机会先执行;组件未被 KeepAlive 缓存时 onActivated 不会触发,由这里兜底。
|
||
setTimeout(() => {
|
||
if (!activated) {
|
||
init();
|
||
}
|
||
});
|
||
});
|
||
}
|