ANGULAR | akveo/nebular 系列 - 2.4. 啟用主題系統 | 中文

原文:https://akveo.github.io/nebular/docs/guides/enable-theme-system#advanced-setup

啟用主題系統

注意
如果您使用我們的 ngx-admin 入門套件 那麼您已經有了進階設定。

基礎設定

:你只須要 Nebular 提供的預設樣式(宇宙樣式 cosmic 或是預設樣式 default),且不打算使用變數或是「熱載 hot-reload」 支援。

  1. 那麼您只須要加入一個你想要使用的主題的 CSS 檔案到 .angular-cli.json 檔案像是:
1
2
3
4
"styles": [
"../node_modules/@nebular/theme/styles/prebuilt/cosmic.css", // 或是 default.css
],

就這樣! 未來,如果您須要進階功能您可以簡單地從「一般設定步驟」或是「進階設定步驟」開始使用主題。


一般設定

:您希望在您的程式碼中使用主題系統並且能夠更改變數時。

注意:這個設定可能看起來有點冗長,遺憾的是 angular-cli 對客製化配置的支援有限;希望未來的版本和外掛支援可以大大簡化。

  1. 使用 Nebular 主題宣告建立一個 themes.scss 檔案。我們假設這個主題是以 default 主題為基礎,所以依然命名為 default
1
2
3
4
5
6
7
8
9
10
11
12
13
// 匯入 Nebular 主題系統以及 default 主題
@import '~@nebular/theme/styles/theming';
@import '~@nebular/theme/styles/themes/default';

// 改變你想要改變的變數或是不設定變數而保留預設值。預設值為白色,讓我們把它變成藍色。
$nb-themes: nb-register-theme((
color-bg: #4ca6ff,
shadow: 0 1px 2px 0 #3780c0,
layout-bg: #ffffff,
color-fg: #222222
), default, default);
// 第一個 default 為新主題的名稱;第二 default 為以 Nebular 提供的 default 主題為基礎。

  1. 現在找到您的 styles.scss (或者建立一個然後加入到 .angular-cli.json"styles": [..] 之下) 並且根據以下程式碼貼上:
1
2
3
4
5
6
7
8
9
10
11
// 這是您建立的 themes.scss 檔,請確認路徑正確
@import 'themes';

// 框架的元件樣式將使用您的新主題
@import '~@nebular/theme/styles/globals';

// 安裝框架
@include nb-install() {
@include nb-theme-global();
};

  1. 在這個步驟,您已經可以自訂變數以變更元件的外觀與行為。為了能夠將這些(或是新的) 變數使用於客製化的元件中,只需要在任何 *.component.scss 中加入一行 import
1
2
3
4
5
6
@import '../../../@theme/styles/themes';

:host {

background: nb-theme(card-bg); // 然後使用這個主題
}

注意
只需要呼叫 nb-theme(variable-name) 函數即可存取變數.

這個步驟您將得到類似下圖的內容:

image


進階設定

:您須要在 run-time 時在多個主題中切換主題時

這個步驟假設您已經完成 一般設定 步驟.

  1. 假設您已經有一個來自前一個步驟產生的 default 主題的 themes.scss 檔案,讓我們加入一個新的主題,以 Nebular 的 cosmic 主題為基礎並且命名為 dark:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...

// 加上 cosmic 主題 import 在原有的 default 主題之下;
@import '~@nebular/theme/styles/themes/cosmic';

// 並將兩個主題都標記為啟用
$nb-enabled-themes: (default, dark);

...

// 改變你想要改變的變數或是不設定變數而保留預設值。預設值為宇宙色,讓我們把它變成黑暗色。
$nb-themes: nb-register-theme((

color-bg: #222222,
shadow: 0 1px 2px 0 #000000,
color-fg: #303030,
layout-bg: #ededed,
), dark, cosmic);

所以您的 themes.scss 檔案會看起來是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@import '~@nebular/theme/styles/theming';
@import '~@nebular/theme/styles/themes/default';
@import '~@nebular/theme/styles/themes/cosmic';

$nb-enabled-themes: (default, dark);

// default 主題
$nb-themes: nb-register-theme((

color-bg: #4ca6ff,
shadow: 0 1px 2px 0 #3780c0,
layout-bg: #ffffff,
color-fg: #222222,
), default, default);


// dark 主題
$nb-themes: nb-register-theme((

color-bg: #222222,
shadow: 0 1px 2px 0 #000000,
color-fg: #303030,
layout-bg: #ededed,
), dark, cosmic);

此時啟用您的 dark 主題您的頁面會看起來像是:

image

  1. 現在啟用「熱載 hot reload」的魔術,打包您所有含有 nb-install-component*.component.scss 樣式 像是:
1
2
3
4
5
6
7
8
9
10
@import '../../../@theme/styles/themes';

@include nb-install-component() {
background: nb-theme(card-bg); // 對於每一個被註冊的主題鑲嵌相對應的值

.container {
background: nb-theme(color-bg);
font-weight: nb-theme(font-weight-bold);
}
}

注意
這個 install-component SCSS mixin ‘已經涵蓋了’ 宣告在程式碼中的 :host,意思是你不需要在 @include nb-install-component() { 中而外宣告一個 :host 並且樣式也會正確的渲染到這個 host

完成,你可以在 run-time 時改變主題。以下是如何從元件中執行這個操作:

1
2
3
4
5
6
7
8
// 使用主題服務
constructor(private themeService: NbThemeService) {
}

// 改變成 `dark`
enableDarkTheme() {
this.themeService.changeTheme('dark');
}

相關文章


ANGULAR | akveo/nebular 系列 - 2.4. 啟用主題系統 | 中文
http://example.com/2018/08/01/enabling-theme-system/
Author
John Doe
Posted on
August 1, 2018
Licensed under