Я пытаюсь создать custom-element (веб-компонент) в svelte 3. Я не могу найти ни одного способ стилизовать вложенные компоненты из css. Svelte удаляет стили перед тем, как внедрить их в <style>
внутри ShadowDOM.
Проблема в том, что я хочу, чтобы в моем корневом элементе были вложенные компоненты. Например:
- RootComponent (svelte custom-element)
- (imports) FooComponent
- (импорт) BarComponent
Как указано здесь: svelte-custom-element
Для всех компонентов, импортированных в custom-element, параметр компилятора должен быть установлен на <svelte:options tag="component-name" />
.
При установке этого параметра вложенные компоненты работают должным образом и внедряются в корневой элемент ShadowDOM. Проблема в том, что styles
, определенные во вложенных компонентах, не внедряются. Обходной путь для этой проблемы - внедрить их в корневой элемент <style>
в качестве глобальных стилей в ShadowDom. (Не) к счастью, svelte автоматически удаляет все неиспользуемые стили во время компиляции, когда пользовательские элементы еще не существуют.
Моя цель - создать веб-компонент с помощью svelte, а затем использовать его вне svelte как собственный веб-компонент.
Вот REPL.
Пользовательские элементы на самом деле не работают в REPL, как пишет Conduitry:
Параметры компилятора в REPL фактически не влияют на выполняемый> код, а только на отображаемый код. Таким образом, включение customElement> не означает, что вы создаете и запускаете веб-компонент.
Так что это больше похоже на пример кода, чем на рабочий.
- Я хотел бы знать, есть ли другой способ создать стройный пользовательский элемент с вложенным компонентом и правильным стилем.
- Есть ли способ отключить удаление неиспользуемых css?
с <div class="nested">
запускается Вложенный компонент, импортированный из Nested.svelte.
В элемент <style>
должен быть введен класс .nested
, но он удаляется компилятором Svelte.