角度主题

2024-02-11

我希望在我的 Angular (5) web 应用程序中实现一个主题。我没有将 Angular Material 用于所有内容(即我只使用输入字段和某些组件)

我正在寻找一个可以在运行时使用/控制/更改的主题解决方案,而不必重新编译我的应用程序。

我使用 SCSS/Sass。

我目前所做的:(在一个非常基本的例子中)

变量.scss

$color-1: #fff;
$color-2: #000;

测试组件/测试组件.scss

@import "../variables.scss";

.test {
    color: $color-1;
    border: 1px solid $color-2;
}

自从我开始开发我的应用程序以来,我只是将值分配给 SCSS 变量并使用它们,但接下来我想实现一个不错的主题解决方案,我可以在运行时控制主题,因为变量仅设置为编译时间。

我研究过的其他事情:

我碰到本文 https://medium.com/@dmitriy.borodiy/easy-color-theming-with-scss-bc38fd5734d1这似乎是一个不错的实现想法,但是在组件级别,我不完全确定它的效果如何,因为深度嵌套的组件将无法看到其路由器周围的容器是什么类。

还有其他想法吗?只是重申一下,我not想要修改角材料 https://material.angular.io/主题我有。

EDIT 1:

I came 穿过这个神奇的帖子 http://anasfirdousi.com/creating-themeable-components-in-angular.html,早上会做一些编码,看看我能用它做什么。


Eureka!

因此,我最终制定的解决方案效果非常好,使我能够轻松地针对我想要的每个主题组件修改现有的 SASS。

我采用了使用的概念here http://anasfirdousi.com/creating-themeable-components-in-angular.html并修改了辅助函数,以满足您可能想要在主题中查找的任意数量的键(而不是像示例那样只有 2 个级别)。

为了让它像我一样在 Angular 应用程序的上下文中工作,我使用了:主机上下文 https://www.concretepage.com/angular-2/angular-2-4-component-styles-host-host-context-deep-selector-example选择器:

@mixin theme-this($themes: $themes) {
    @each $theme-name, $theme in $themes {
        :host-context(.theme-#{$theme-name}) & {
            $theme-map: $theme !global;

            @content;

            $theme-map: null !global;
        }
    }
}

然后在您的基本组件中,将所有内容包装在具有相关主题类 (.theme-x) 的 div 中,并且任何生成的 CSS 其类与当前应用于基本组件的类相匹配的 CSS 都将自动在浏览器中呈现。

像这样处理主题的一件很酷的事情是您可以在运行时更改它。

我添加了一个主题服务来包含当前选定的主题,我将在稍后阶段对其进行修改,以将主题存储在浏览器本地存储/用户 cookie/等中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

角度主题 的相关文章

随机推荐