有时候你可能需要对插槽内容的更改做一些事情。例如插槽中有一个动态项目列表,你可能希望在插槽内容更改时更新该列表相关的数据。
不幸的是,Vue没有提供一个内置的方式来观察插槽的变化,但是你可以使用MutationObserver API
来对插槽内容的变化做出调整。它是一个内置的浏览器API,因此与框架无关:
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount } from 'vue';
defineProps<{ msg: string }>();
const slotElement = ref(null);
const observer = ref(null);
const update = () => {
console.log('UPDATE');
};
onMounted(() => {
observer.value = new MutationObserver(update);
observer.value.observe(slotElement.value, {
childList: true,
subtree: true,
});
});
onBeforeUnmount(() => {
if (observer.value) {
observer.value.disconnect();
}
});
</script>
<template>
<h1>{{ msg }}</h1>
<div ref="slotElement">
<slot />
</div>
</template>
如果组件被挂载,我们创建一个新的MutationObserver
实例并调用observe
方法开始观察slot
元素。我们传递update
方法作为回调函数,并传递一个带有childList
和subtree
选项的对象来观察插槽内容的变化。
当组件被卸载时,我们调用disconnect
方法来停止观察slot
元素。这是避免内存泄漏所必需的。
可以在下面的demo项目中尝试一下。每次单击“Increment
”按钮时,都会调用update
方法并将一条消息记录到控制台:
这是demo演示地址:https://stackblitz.com/edit/vue-tip-watch-slot-changes
👉🏻让我们一起来看看,什么是Vapor Mode,Vapor Mode是如何工作的,Vapor Mode的未来是什么!
👉🏻在这篇文章中,作者分享了他转向Vue.js的影响
👉🏻他谈到了学习曲线的高点和低点,这些框架之间的差异,以及它对他职业生涯的影响。
👉🏻本文介绍了Vue应用程序中轮询的概念。
👉🏻使用Vue在您的页面上显示令人敬畏的五彩纸屑爆炸。
👉🏻SSR友好,在Nuxt中工作起来很有魅力。
👉🏻内置于JavaScript运行时中的结构化克隆函数可用于制作JavaScript中对象的深拷贝。
👉🏻本文深入探讨不同类型的缓存,如页面、内容、数据、指令、浏览器和查询缓存。
👉🏻看看如何通过策略,工具和提示来提高网站的性能,以帮助您做出显著的改进。
👉🏻一个可以在文件浏览器中玩的开源短文本冒险游戏。
看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~
专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)