我知道这对聚会来说太晚了,但在终于找到了一个干净的方法之后不想拉一个 DenverCoder9。
首先,转到 angular material2 github 上的 this link 并找出您的主题使用的调色板。 (该链接指向版本 6,因此请确保将标签更改为您使用的任何版本。)
然后在您的项目中的某处创建一个variables.scss 文件来存储您的主题的调色板引用(下面的示例使用靛蓝粉色主题的调色板):
/* variables.scss */
@import "~@angular/material/theming";
$primaryPalette: mat-palette($mat-indigo);
$accentPalette: mat-palette($mat-pink, A200, A100, A400);
// the default warn palette is red, so use that if the theme doesn't define one
$warnPalette: mat-palette($mat-red);
然后您可以将variables.scss 文件包含到您的样式表中,并使用mat-color(<palette>) 为您的类获取颜色。
/* my-component.scss */
@import "~@angular/material/theming";
@import 'variables.scss';
.my-primary-text {
color: mat-color($primaryPalette);
}
.my-accent-text {
color: mat-color($accentPalette);
}
使用此方法,您仍然可以使用预构建的主题。使用他们发布的文档重新创建主题可能会更干净,但现在我对此很满意。
希望这可以为下一个人节省很多痛苦和痛苦。
更新:重新定义默认主题以防止 OhGodTheyChangedColorsThisRelease
谁知道角材质何时会改变它们的主题颜色,所以重新创建默认它们可能是个好主意。
因此,在帖子的前一部分的基础上,添加 mat-light-theme/mat-dark-theme 混合以重新定义新主题。
/* variables.scss */
@import "~@angular/material/theming";
$primaryPalette: mat-palette($mat-indigo);
$accentPalette: mat-palette($mat-pink, A200, A100, A400);
// the default warn palette is red, so use that if the theme doesn't define one
$warnPalette: mat-palette($mat-red);
// re-define the indigo-pink theme
$defaultTheme: mat-light-theme($primaryPalette, $accentPalette, $warnPalette);
然后在您的主根目录styles.scss 中为您的应用程序,
/* styles.scss */
@import '~@angular/material/theming';
@import './scss/variables.scss';
@include angular-material-theme($defaultTheme);
确保将<link href=> 放入默认样式表的index.html。
太棒了!现在,如果您更新 Angular 材质并且它们改变了颜色,那您很好!您可以通过使用 variables.scss 中的调色板来更新整个应用程序的颜色。