У меня проблема с тем, что компоненты синхронизации загружаются перед тем, как он будет показан.
Компоненты, импортированные с 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 все еще загружаются.Как ни странно, ни смонтированные, ни созданные не запускаются.Таким образом, кажется, что все соблюдает надлежащие правила, кроме асинхронной загрузки компонента.
Желательно, чтобы я мог использовать слот с v-if
и не запускать загрузку сгенерированного фрагмента для этого async
компонента.
Очевидно, что это не такая большая проблема, если он загружается асинхронно, но даже HTTP2 имеет свои ограничения, когда дело доходит до запросов.Я бы предпочел загрузить его при необходимости.