我知道这已经晚了,但这应该希望能对其他人有所帮助,因为它没有记录在案,我只是花了很多时间来弄清楚。以下代码允许您的自定义组件使用“模式”属性来确定加载哪种样式。
第 1 步:在组件定义中定义多个 styleUrls(又名“模式”)。我使用的是“dark”和“default”——但您可以根据需要定义任意数量。例如,ionic 使用“ios”和“md”。
@Component({
tag: 'my-component',
styleUrls: {
default: 'my-component.default.pcss',
dark: 'my-component.dark.pcss',
},
})
export class MyComponent { ... }
第 2 步:创建样式文件(通常使用共享的通用样式):
第 3 步:更新您的 stencil.config.ts 以使用 globalScript:
export const config: Config = {
namespace: 'mycomponent',
globalScript: './src/globals/global.ts',
...
}
第 4 步:创建全局脚本并定义一个“setMode”函数,如下所示:
import { setMode } from '@stencil/core';
setMode(elm => {
// NOTE: you can write whatever you want here - it's up to you. This
// function must return one of the style "modes" defined in step 1.
return (elm as any).mode || elm.getAttribute('mode') || 'default';
});
第 5 步:使用您的自定义组件,如下所示:
<!-- default mode -->
<my-component />
<my-component mode="default" />
<!-- dark mode -->
<my-component mode="dark" />
您可以自定义setMode
用于确定模式的函数 - 例如,您可以在 上查找属性window
,或检查元素上的 className。由你决定。以上只是一个简单的示例,它允许您在元素上使用“模式”属性......如果未指定任何内容,则返回“默认”。