【问题标题】:Angular2 dynamic styleAngular2动态风格
【发布时间】:2017-09-01 12:18:50
【问题描述】:

动态样式呢?

假设您正在为多个客户部署一个独特的平台。 (SAAS平台)

您部署一个 webapp 文件夹,但这些 webapp 必须为每个客户端应用不同的主题(颜色)(示例配置:按域名加载颜色)。

在angular 2中,有scss但scss是编译语言->所以每次需要为每个客户端编译N个webapps。这需要时间,而且很难维护。

所以我看到的唯一解决方案是: - 在加载应用程序时在运行时(通过远程服务器调用、fe:jsass 或 js)编译 scss,并将生成的 css 文件注入 head 部分。

但我认为这是 angular2 组件的 (s)css 文件的反模式。 此外,生成的文件将包含组件样式,即使组件未初始化,也会应用于整个页面。

您有任何框架或其他解决方案吗?

【问题讨论】:

  • SCSS 只编译一次(当您构建应用程序时)到 CSS 文件中。 Typescript 文件也是如此,编译并压缩成一个 JS 文件。
  • 您应该创建一个自定义RootRenderer,它将处理编译 sass 或使用自定义 css 文件。为此,您将需要创建一个新平台,这是我从未做过的一项艰巨任务。看看它是如何工作的in browser platform。在 ng-europe 有一个 speach about custom renderers
  • 太好了,我去看看。

标签: css angular sass


【解决方案1】:

您可以通过创建一个服务来实现此目的,该服务返回您想要更改的某些结构的颜色并将其注入到组件中

组件html里面的例子:

<div [style.background-color]="themeService.getNavbarColor()"></div>

并做一些逻辑来获取 App 启动时每个用户的模式并插入到 ThemeService 中。

完整示例:

import { Component } from '@angular/core'

@Component ({
  selector: 'my-component',
  templateUrl: './my-component.component.html',
})
export class MyComponent {

    constructor( private themeService: ThemeService){}
}

@Injectable()
export class ThemeService {
    backgroundColor: string

    getNavbarBackgroundColor: string() {
        return this.backgroundColor;
    }

    someLogicToGetTheme() {
        //do stuff
    }

    ngOnInit() {
        this.someLogicToGetTheme()
    }
}

【讨论】:

  • 是的,但很遗憾必须在非样式文件中指定颜色。在 Google Web Toolkit (GWT) 世界中,您可以评估 GSS 文件中的值。我很惊讶没有类似的东西。
  • 确实很遗憾,但我不知道另一种方法可以在 Angular 上动态更改生产中的 CSS
  • 我正在尝试实现同样的目标,这个项目有动态主题github.com/akveo/nebular 但sass 代码相当复杂@cassiano
猜你喜欢
  • 2012-10-16
  • 1970-01-01
  • 2017-09-23
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2012-07-13
相关资源
最近更新 更多