html - 影响 Angular 6+ 中所有组件和模态 <ng-template let-modal> 的主题服务

标签 html angular service sass themes

你能帮我保留 theme服务,并且仍然能够将主题应用到所有组件(以及这些模式)?

最佳答案

结果很长一段时间没有人回答,所以我决定自己深入研究解决方案,请参阅下面的仅供引用。

首先,仍然继续使用theme服务 Renderer2进入theme.service.ts (之前在 header 组件中本地设置):

    @Injectable({
      providedIn: 'root'
    })
    export class ThemeService {
      public isDarkMode: boolean;
      private renderer: Renderer2;

      constructor(
        @Inject(DOCUMENT) private document: Document,
        rendererFactory: RendererFactory2
      ) {    this.renderer = rendererFactory.createRenderer(null, null);
      }

      public toggleDarkMode() {
        this.isDarkMode = !this.isDarkMode;

        if (this.isDarkMode) {
          this.renderer.addClass(this.document.body, 'dark-mode');
        } else {
          this.renderer.removeClass(this.document.body, 'dark-mode');
        } 
      }
    }

其次,需要在构造函数中设置一个公共(public)变量,这里我选择header.component.ts的构造函数:

export class HeaderComponent implements OnInit {
      /*
      * Inject the theme service which will be called by our button (click).
      * @param {ThemeService} themeService instance.
      */
      constructor(public themeService: ThemeService) {}

      ngOnInit() {}
    }

然后在 header.component.html 中放置一个按钮切换主题(注意:您可以将按钮放置在项目中的任何位置,以及相应的 abc.component.ts 中定义的公共(public)变量)

<button (click)="themeService.toggleDarkMode()"><i class="fa fa-moon"></i></button>

现公开toggleDarkMode每当单击按钮时都会触发函数,然后当主题服务按您定义的 dark-mode 更新时,模态和其他组件将反射(reflect)更改。样式,例如:

#lucky.dark-mode {
    color: #a2b9c8;
    background-color: #01263f!important;
}

您可能需要将此应用于所有 <body>index.html :

<body id="lucky">
  <app-root></app-root>
</body>

祝你好运,编码愉快!

关于html - 影响 Angular 6+ 中所有组件和模态 <ng-template let-modal> 的主题服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59341421/

相关文章:

css - 隐藏行后 Angular 重新应用表 strip 化

python - 如何让多个 Pod 在 Kubernetes 上相互通信

delphi - 没有主图标的服务应用程序

android - TabActivity 和本地服务 : How to consume data from services in each tab?

javascript - 我的脚本无法识别我的 JavaScript 代码

javascript - JQuery 时间选择器与有序列表项在同一行

html - 使边框变粗并改变颜色或在 awesome-bootstrap-checkbox 上产生阴影效果?

angular - 如何将可观察值传递给@Input() Angular 4

javascript - Jquery ui 可调整高度 - 默认高度 :0px

android - 该应用程序未正确配置 Google Play 游戏服务