2016-09-01 2 views
1

Я использую стили из bootswatch (файл CSS для замены файла CSS для начальной загрузки), и я хочу использовать другой для каждого маршрута на мое приложение (например, панель управления) означает, что мне нужен другой файл CSS, который будет применяться глобально при активации определенного маршрута. Я попытался удалить ссылку CSS из index.html и поместить ее в StyleUrls основного компонента, подобного этому (фиктивный пример одной из ветвей моего веб-сайта):Angular2 - Изменение глобального стиля index.html или применение styleurl к маршруту

import { Component } from '@angular/core' 
import { ROUTER_DIRECTIVES, Router } from '@angular/router' 

@Component({ 
    moduleId: module.id, 
    styleUrls: ['../../../assets/css/bootstrap-simplex.css'], 
    template: '<navbar></navbar><router-outlet></router-outlet>' , 
    directives: [ROUTER_DIRECTIVES] 
}) 
export class AdministrationComponent { 
    constructor(public router: Router){} 

} 

Теперь это изменить стиль элементов этого компонента, но не к Чайлдс или компонентов внутри его router-outlet

Итак, есть ли способ сделать стильUrls унаследованным дочерним компонентам? или я могу изменить ссылку CSS index.html программно?

спасибо.

+1

Вы можете программно изменить ссылку на CSS, но это не специфичный для Angular2 (простой JS). –

+0

ну, я не хочу этого, потому что функциональность изменения будет внутри угловой, я не хочу, чтобы это было обходным решением , но вы имеете в виду сделать его нормальной переменной, а затем изменить его с маршрутизатора вправо? –

+1

Вы можете подписаться на изменения маршрута, а затем называть код, который изменяет ссылку. –

ответ

0

Ну, раствор, как было предложено @ Гюнтер Zöchbauer (спасибо)
это сделать функцию JS в index.html затем вызвать его из компонента, как это:

index.html

<link id="globalTheme" href="libs/bootstrap.min.css" rel="stylesheet"> 
<script> 
    var file; 
    function changeTheme(section) { 
     switch (section) { 
      case 'primary': 
       file = '-flatly'; 
       break; 
      case 'administration': 
       file = '-lumen'; 
       break; 
     } 
     document.getElementById("globalTheme").setAttribute("href",'libs/bootstrap' + file + '.min.css'); 
    } 
</script> 

затем в компоненте

import { Component } from '@angular/core' 
import { ROUTER_DIRECTIVES, Router } from '@angular/router' 

declare var changeTheme: any 

@Component({ 
    moduleId: module.id, 
    templateUrl: '../templates/administration.template.html', 
    directives: [ROUTER_DIRECTIVES] 
}) 
export class AdministrationComponent{ 
    constructor(public router: Router){ 
     changeTheme('administration') 
    } 

} 

надеюсь, что это будет полезно для кого-то.

Смежные вопросы