【发布时间】:2018-03-08 18:47:43
【问题描述】:
我想创建一个“可主题化”的 Angular 库,这意味着该库的客户端可以应用例如他们自己的颜色。我检查了材料设计是如何做到的,他们正在做的是这样的:
在(库)/theming.scss:
@mixin hello-button($theme) {
$hello-background: map-get($theme, 'hello-background');
.hello {
background: $hello-background;
}
}
@mixin apply-theme($theme) {
@include hello-button($theme);
}
在(客户端)/styles.scss:
@import '~library/theming';
$theme: (
'hello-background': yellow
);
@include apply-theme($theme);
但这设置了全局类...这里的“.hello”类是全局的,所以任何有“.hello”类的东西都会是黄色的,即使它只是偶然的同名。
所以我的问题是,有没有办法在没有全局类的情况下自定义 scss,这更符合 Angular 的视图封装精神?我知道我可以使用 ngStyle 设置样式,但我更喜欢 scss 方式。
【问题讨论】:
-
Material design classes 以
mat为前缀,如果我没记错的话,可能是为了避免同样的问题。所以你可以确保你的类有一个前缀 -
是的,但是如果我的前缀是“bla”并且其他人也创建了一个带有前缀“bla”的库怎么办。前缀的老问题,这就是我们现在有视图封装概念的原因。