Переключить v-if на компонент слота?

Я пытаюсь использовать intersectionObserver, чтобы предотвратить загрузку компонентов до тех пор, пока они не появятся в поле зрения следующим образом:

Пример использования:

<lazy-component>
    <newsletter slot-scope = "{}"></newsletter>
</lazy-component

Ленивый компонент - это отдельный файловый компонент, который содержит этот шаблон:

LazyComponent.vue

<template>
    <span>
        <slot v-if = "visible"></slot>
    </span>
</template>

Компонент информационного бюллетеня будет отображаться, если я не добавлю к нему slot-scope, потому что он сначала отображается, а только затем вставляется в слот с помощью оператора v-if.

На этом этапе компонент был загружен, и если бы это был компонент async, его Javascript также был бы загружен. Это то, что я пытаюсь предотвратить.

Хотя slot-scope работает, это кажется довольно хакерским и непонятным для других пользователей.

Можно ли установить v-if на false на компоненте в моих шаблонах и заставить lazy-component каким-то образом вручную установить v-if на true?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
554
1

Ответы 1

Если я вас правильно понял, вы можете сделать это, передав visible в качестве данных в слот.

LazyComponent.vue

<template>
    <span>
        <slot :visible = "visible"></slot>
    </span>
</template>

Использование LazyComponent

<lazy-component>
    <newsletter slot-scope = "{visible}" v-if = "visible"></newsletter>
</lazy-component

Другие вопросы по теме