2017-05-30 73 views
2

我现在所拥有的是黑暗的主题页面index.html中:Angular2 - 如何有条件地加载index.html中的css文件?

<base href="/"> 
<html> 
<head> 
    <title>XXX</title> 
</head> 
<body> 
    <link rel="stylesheet" type="text/css" href="assets/dark_room.css"> 
    <my-app>Loading...</my-app> 
</body> 
</html> 

我也有,是落实需要一个明亮的“light_room.css”的主题,用户可以切换上需要的主题基地。我想知道我怎么能做到这一点?

我认为这可以通过使用url参数来完成,以便当用户在url的末尾输入类似?light_room=True时,页面将加载light_room.css。不过,我认为它只能在普通模板中完成,而不能在index.html中完成。

有没有人在index.html中有条件加载css文件有类似的经验?

+0

您是否试过这种方法? 让您的后端根据URL参数生成不同的index.html。 – Niklas

+0

@Niklas我认为这可能是一种方法,但我不知道如何。因为设置URL参数通常在.ts文件中完成,但index.html没有。 –

回答

2

重点是,主题通常只是一些不同的颜色。您可以将所有主题添加到一个CSS。 my-app > .dark获取不同的颜色,并且该类将在代码中动态添加。

这里有一个更详细的例子,我如何使用它:

APP-theme.scss:

@import '[email protected]/material/theming'; 

@include mat-core(); 
$words-app-primary: mat-palette($mat-teal, 300); 
$words-app-secondary: mat-palette($mat-indigo, 500); 
$words-app-warn: mat-palette($mat-red, 500); 

$words-app-theme: mat-light-theme($words-app-primary, $words-app-secondary, $words-app-warn); 
@include angular-material-theme($words-app-theme); 

app-words-root > md-sidenav-container.dark { 
    $words-app-theme-dark: mat-dark-theme($words-app-primary, $words-app-secondary, $words-app-warn); 
    @include angular-material-theme($words-app-theme-dark); 
} 

app.component.html:

<md-sidenav-container [class.dark]="useDarkTheme"> ... </md-sidenav-container> 

非角度版

app.component.js

import { DOCUMENT } from '@angular/platform-browser'; 

class AppComponent { 
    constructor(@Inject(DOCUMENT) document: any) { 
    let head = document.getElementsByTagName('head')[0]; 
    let link = document.createElement('link'); 
    link.rel = 'stylesheet'; 
    link.type = 'text/css'; 
    link.href = 'assets/dark_room.css'; // you may want to get this from local storage or location 
    head.appendChild(link); 
    } 
} 
+0

谢谢回答,但我不允许触摸css文件,所以....我仍然需要找到一种方法来选择这两个文件不知何故 –

+0

这将是类似的问题,因为标题 - 角2没有功能在''之外操作。对于标题,他们提供“标题”服务。但不适用于加载CSS。 – iRaS

+0

是的,如果我可以包含功能它可能是可行的。 –

相关问题