【问题标题】:mat-menu theme color not changingmat-menu 主题颜色不变
【发布时间】:2017-10-22 01:38:16
【问题描述】:

我的主题都完美运行,但由于某种原因,我的 mat-menu 只会在调用默认值时获得主题,否则不会。 所以为了不破坏它的主题,我必须打电话 @include angular-material-theme($dark-theme);

就在我的 style.scss 的顶部,然后有我设置的自定义类,我的灯光默认加载,如下所示:

import {OverlayContainer} from "@angular/cdk/overlay";

@Component({
    selector: 'app-navbar',
    templateUrl: './navbar.component.html',
    styleUrls: ['./navbar.component.scss']
})
export class NavbarComponent implements OnInit, AfterViewInit {
    title:string = "Callum.Tech";

    themeClass: string = "light-theme";

    overlay;

    constructor(
        private overlayContainer: OverlayContainer
    ) {
        this.overlay = overlayContainer;
    }

    setDarkTheme(): void {
        this.themeClass = "dark-theme";
    }

    setLightTheme(): void {
        this.themeClass = "light-theme";
    }

    ngOnInit() {
        this.overlay.themeClass = this.themeClass;
    }
}

其他一切都将重新主题并正常工作,而无需调用我提到的 start 包括,但 mat-menu 会抛出一个合适的,并且只使用它在站点启动时提供的第一个主题,并且不会随着主题的其余部分而改变。

这是在 styles.scss 开头调用的深色主题和正常加载的浅色主题的样子

这里是选择的暗色主题,但是在styles.scss开头没有调用暗色主题:

【问题讨论】:

  • 您使用的是哪个版本的 Angular Material?最新版本发生了重大变化。
  • 我相信我使用的是最新版本,我应该暂时降级吗?为此,我只需使用 npm 卸载软件包,然后再次安装,但在安装行 cmd 中设置版本?
  • 你能试试运行npm ls @angular/material吗?
  • 为了清楚起见,这是整个结果; i.imgur.com/CGuVdaL.png 但材料本身的实际版本列为@angular/material@2.0.0-beta.12

标签: css angular typescript angular-material2


【解决方案1】:

2.0.0-beta.11 的重大更改中:

overlay:现在 Overlay 是 cdk 的一部分,而不是直接的 Angular Material,themeClass 属性已被删除。要将类添加到覆盖层以进行主题化,您可以执行

overlayContainer.getContainerElement().classList.add('my-theme-class');

因此,您可以按如下方式更改代码:

constructor(
    private overlayContainer: OverlayContainer
) {
    this.overlay = overlayContainer.getContainerElement();
}

toggleTheme(): void {
    if (this.overlay.classList.contains("dark-theme") {
        this.overlay.classList.remove("dark-theme");
        this.overlay.classList.add("light-theme");
    } else if (this.overlay.classList.contains("light-theme") {
        this.overlay.classList.remove("light-theme");
        this.overlay.classList.add("dark-theme");
    } else {
        this.overlay.classList.add("light-theme");
    }
}
ngOnInit() {
    this.toggleTheme();
}

【讨论】:

  • 你是对的,但是对于主题的各个方面要正确更改,我必须像这样调用每个 setTheme() void 下的 classList.add 函数;因此,也许可以编辑您的答案以供未来用户澄清https://i.imgur.com/JDWvB3y.png
  • Edit 我在控制台记录了 classList 并且它没有添加相同的类,因此在每次调用中添加它似乎都很好 或者我可以简单地添加类,然后用 pure 切换它们之后的文本,对于我目前的困境,它工作正常,但我想它可能会在未来导致与速度相关的问题或重复代码
猜你喜欢
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多