我想爲用戶提供一個按鈕來更改整個網站的主題。我正在使用bootstrap「.scss」文件。 以下是我所做的:Angular 4 CLI,WebPack,爲整個網站動態切換引導主題
我在「src/styles」文件夾中有「dark-styles.scss」和「light-styles.scss」。這兩個文件都會覆蓋我需要覆蓋的類和方法,並且還會從「node-module」中導入默認值「bootstrap.scss」。當我通過下面的「.angular-cli.json」嚮應用程序提供這些文件時,它完美地工作。
"styles": [
"../node_modules/font-awesome/css/font-awesome.css",
"../node_modules/@swimlane/ngx-datatable/release/index.css",
"../node_modules/@swimlane/ngx-datatable/release/assets/icons.css",
"../src/styles/dark-styles.scss"
],
,或者
"styles": [
"../node_modules/font-awesome/css/font-awesome.css",
"../node_modules/@swimlane/ngx-datatable/release/index.css",
"../node_modules/@swimlane/ngx-datatable/release/assets/icons.css",
"../src/styles/light-styles.scss"
],
如果我提供黑暗中的主題是黑暗的,如果我提供光的主題是光。
但我想實現的是動態地允許用戶更改主題。因此,基於stackoverflow中的其他答案;我訪問了我的應用程序組件中的「文檔」,這也是我的根組件。它使我可以訪問整個html頁面,在那裏我可以從應用程序組件中設置一個鏈接標記。
HTML文件
<head>
<link id="theme" type="text/scss" rel="stylesheet" src="">
</head>
<body>
content .....
</body>
角cli.json
"styles": [
"../node_modules/font-awesome/css/font-awesome.css",
"../node_modules/@swimlane/ngx-datatable/release/index.css",
"../node_modules/@swimlane/ngx-datatable/release/assets/icons.css"
],
應用組分:
import { Component, OnInit, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/platform-browser';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent implements OnInit {
currentTheme: string;
constructor(@Inject(DOCUMENT) private document) {
}
ngOnInit() {
this.currentTheme = 'dark';
this.document.getElementById('theme').href = '../styles/dark-styles.scss';
}
handelChangeTheme(event) {
if (this.currentTheme === 'dark') {
this.document.getElementById('theme').href = '../styles/light-styles.scss';
this.currentTheme = 'light';
console.log('light');
} else {
this.document.getElementById('theme').href = '../styles/dark-styles.scss';
this.currentTheme = 'dark';
console.log('dark');
}
}
}
雖然觸發了#theme變化的情況下 「handleChangeTheme」 在href在html文件中。但它不更新或應用樣式。我知道這與WebPack和編譯scss文件的方式有關。有沒有人遇到類似的情況或知道解決這個問題的方法。謝謝
我猜你必須編譯這兩個scss文件,並讓它們可供應用程序選擇(即把它們包裝到你的webapp中) – ochi
@ochi ...試過了......沒有工作。在這樣做的時候,應用默認的引導程序覆蓋全部被拒絕。 – Virodh
你解決了嗎?我被分配去做同樣的事情。任何幫助將不勝感激 –