首页 文章

角度设置组件styleUrls动态

提问于
浏览
3

我在新项目中使用最新版本的angualar 5.0 . 我是这个框架的新手,并希望得到角度开发人员的一些帮助 .

我想动态地在运行时使用类级别变量设置styleUrls属性 . 在我的例子中,styleURL路径将通过角度服务来自数据库 .

import { Component } from '@angular/core';
import { Title } from '@angular/platform-browser';

@Component({    
    templateUrl: './search.component.html',
    styleUrls: ['./search.component.css']
})


export class SearchComponent {
    pageName = 'New Search Page';
    PropfavMovie = 'Gladiator';

    constructor(private _titleSrv: Title) {
        this._titleSrv.setTitle('Search page');

    }

有没有办法可以在ngOnInit事件中或从SearchComponent类的构造函数中设置Component的 styleUrls property .

就我而言,每个客户都有自己的样式表 . 所以我需要从数据库中提取样式表路径并动态填充@components属性 .

1 回答

  • 0

    您可以使用函数动态计算要加载的样式文件:

    import { Component } from '@angular/core';
    import { Title } from '@angular/platform-browser';
    
    //An alias that stores environment vars
    import { ENV } from '@app/env';
    
    //Function that calculates de css to load
    export function getBrandCSS(styles: string[]): string [] {
        for(let i=0;i<styles.length;i++){
            styles[i] = './' + ENV.BRAND + '.' + styles[i];
        }
       return styles;
    }
    
    @Component({    
        templateUrl: './search.component.html',
        styleUrls: getBrandCSS(['search.component.css'])
    })
    export class SearchComponent {
        pageName = 'New Search Page';
        PropfavMovie = 'Gladiator';
    
        constructor(private _titleSrv: Title) {
            this._titleSrv.setTitle('Search page');
        }
    }
    

    这样你就可以有多个这样命名的css文件:

    > brand1.search.component.css
    > brand2.search.component.css
    > brand3.search.component.css
    > ***.search.component.css
    

    它们将基于ENV var值加载 . 您还可以编辑该函数以始终加载基本CSS和覆盖某些样式的特定CSS .

相关问题