【发布时间】:2018-11-18 05:44:35
【问题描述】:
我遇到了一个问题,即在实际显示之前加载了同步组件 JavaScript。
使用dynamic-import 导入的组件使用v-if 显示,以便在需要时加载它们。当它们被显示时,它们的 JavaScript 也会被加载。但在slot 的情况下,v-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 都没有被触发。因此,除了组件的异步加载之外,似乎一切都遵守适当的规则。
最好我可以将插槽与v-if 一起使用,而不是触发为该async 组件加载生成的块。
如果异步加载显然不是什么大问题,但即使是 HTTP2 在涉及请求时也有其限制。我宁愿在需要时加载它。
【问题讨论】:
-
尝试使用
v-cloak,它将用CSS隐藏HTML,直到组件完全加载。 -
v-cloak只是应用一个dislay: none,它不会阻止异步生成的 JavaScript 仍然被加载。另外,我已经尝试过使用它,但无济于事。
标签: javascript webpack vue.js vuejs2 vue-component