В приложении Polymer я хочу дать пользователям возможность выбрать определенную тему из предоставленного набора. Предположим, что в элементе-оболочке у меня есть свойство с именем "theme", которое содержит такие значения, как "темный", "светлый", и т. д. Я хотел бы включить определенный файл с пользовательскими стилями в зависимости от этого значения.
Итак, у меня есть элемент my-app-wrapper
, который включает некоторые другие, если пользователь не аутентифицирован, или элемент с именем my-app
для тех, кто аутентифицирован. Теперь я попытался реорганизовать его, чтобы у меня был новый элемент с именем my-app-dark
, который расширяет my-app
и просто добавляет импорт в нужные мне пользовательские стили.
Итак, в файле, скажем, dark.html
у меня есть что-то вроде:
<custom-style>
<style is="custom-style">
html {
--custom-theme: {
--app-primary-color: #990AE3;
--app-secondary-color: var(--paper-deep-orange-500);
}
;
}
</style>
</custom-style>
А в my-app-wrapper
у меня что-то вроде этого:
<template is="dom-if" if="[[_equals(theme, 'dark')]]" restamp>
<my-app-dark></my-app-dark>
</template>
<template is="dom-if" if="[[!_includes(themes, theme)]]" restamp>
<my-app></my-app>
</template>
Проблема здесь в том, что в элементе-оболочке мне нужно импортировать как my-app
, так и my-app-dark
. Таким образом, даже если у меня есть этот оператор if и я использую my-app
, пользовательский стиль, импортированный my-app-dark
, все еще загружается и применяет свои стили.
Мое единственное ограничение заключается в том, что я не могу использовать ленивый импорт и загружать файл с помощью Polymer.importHref, но даже если бы я мог, импорт произошел бы после анализа правил CSS, поэтому он не работал бы. .