我遇到了一个问题,即在实际显示之前加载了同步组件 JavaScript。
使用 a 导入的组件dynamic-import显示v-if为在需要时加载它们。当它们被显示时,它们的 JavaScript 也会被加载。但是对于 a 的情况,slotv-if 不会阻止组件已经加载其生成的 JavaScript 块并将其附加到 DOM。
下拉组件:
<template>
<li class="dropdown" :class="{ open: visible }">
<div class="heading" @click.stop="toggle">
<span>{{ heading }}</span>
</div>
<div class="slot-content" v-if="visible">
<slot></slot>
</div>
</li>
</template>
google-map在插槽中使用带有异步组件的组件:
<dropdown>
<google-map>
<map-marker :data="{{ $marker }}"></map-marker>
</google-map>
</dropdown>
即使插槽有v-if,组件 JavaScript 仍在加载中。奇怪的是,mounted 或 created 都没有被触发。因此,除了组件的异步加载之外,似乎一切都遵守适当的规则。
最好我可以将插槽与 a 一起使用,v-if而不是触发为该async组件加载生成的块。
显然,如果它异步加载不是什么大问题,但即使是 HTTP2 在涉及请求时也有其局限性。我宁愿在需要时加载它。