# ng-zorro-antd Component Documentation (中文)
本文件包含所有组件文档的聚合内容。总计 77 个组件。
---
# Documentation
---
order: 0
title: Ant Design of Angular
---
`ng-zorro-antd` 是遵循 Ant Design 设计规范的 Angular UI 组件库,主要用于研发企业级中后台产品。全部代码开源并遵循 MIT 协议,任何企业、组织及个人均可免费使用。
+
## 特性
- 提炼自企业级中后台产品的交互语言和视觉风格。
- 开箱即用的高质量 Angular 组件库,与 Angular 保持同步升级。
- 使用 TypeScript 构建,提供完整的类型定义文件。
- 支持 Zoneless 和 OnPush 模式,性能卓越。
- 数十个国际化语言支持。
- 深入每个细节的主题定制能力。
## 支持环境
- 现代浏览器,[浏览器支持](https://angular.cn/reference/versions#browser-support)
- 支持服务端渲染
- [Electron](https://www.electronjs.org/)
| [
](https://godban.github.io/browsers-support-badges//)
Edge | [
](https://godban.github.io/browsers-support-badges/)
Firefox | [
](https://godban.github.io/browsers-support-badges/)
Chrome | [
](https://godban.github.io/browsers-support-badges/)
Safari | [
](https://godban.github.io/browsers-support-badges/)
Opera | [
](https://godban.github.io/browsers-support-badges/)
Electron |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
## 当前版本
[](https://www.npmjs.org/package/ng-zorro-antd)
## 支持 Angular 版本
`ng-zorro-antd` 与 `@angular/core` 保持相同的主版本号,目前支持 Angular `^21.0.0` 版本。
## 设计规范
与 Ant Design 设计规范定期同步,你可以在线查看[同步日志](https://github.com/NG-ZORRO/ng-zorro-antd/actions?query=workflow:"styles-sync")。
## 安装
我们强烈推荐官方的 `@angular/cli` 工具链辅助进行开发,在实际项目开发中,它可以很好的满足对 TypeScript 代码的构建、调试、代理、打包部署等一系列工程化的需求。
```bash
$ ng new PROJECT_NAME
$ cd PROJECT_NAME
$ ng add ng-zorro-antd
```
> 如果你想了解更多CLI工具链的功能和命令,建议访问 [Angular CLI](https://github.com/angular/angular-cli) 了解更多
## 链接
- [首页](https://ng.ant.design)
- [Angular官方文档](https://angular.dev/)
- [开发脚手架](https://angular.cn/tools/cli)
- [TypeScript](https://www.typescriptlang.org/)
- [RxJS](https://github.com/ReactiveX/rxjs)
- [VSCode Snippet 插件](https://marketplace.visualstudio.com/items?itemName=cipchk.ng-zorro-vscode)
## 谁在使用
- [阿里巴巴](https://www.alibaba.com/)
- [阿里云](https://www.aliyun.com/)
- [思特沃克](https://www.thoughtworks.com/)
- [招商银行](https://www.cmbchina.com/)
- [共道科技](https://www.gongdao.com/)
- [优速快递](https://www.uce.cn/)
- [轻流](https://qingflow.com/)
- [航天信息股份有限公司](https://www.aisino.com/)
- [达观数据](https://datagrand.com/)
- [Ververica](https://www.ververica.com/)
- [Apache Flink](https://flink.apache.org/)
- [Apache Zeppelin](https://zeppelin.apache.org/)
- [Apache Submarine](https://submarine.apache.org/)
- [Apache Metron](https://metron.apache.org/)
- [Process Automation Group](https://pag.company/)
- [ScentBird](https://www.scentbird.com/)
- [Southern Institute of Technology](https://www.sit.ac.nz/)
- [Hapify (Dynamic boilerplates tool)](https://hub.hapify.io/)
> 这里列出了部分使用者,如果你的公司和产品使用了 NG-ZORRO,欢迎到 [这里](https://github.com/NG-ZORRO/ng-zorro-antd/issues/1142) 留言。
## 如何贡献
在任何形式的参与前,请先阅读 [贡献者文档](https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/CONTRIBUTING.md)。如果你希望参与贡献,欢迎 [Pull Request](https://github.com/NG-ZORRO/ng-zorro-antd/pulls),或给我们 [报告 Bug](https://ng.ant.design/issue-helper/#/en)。
> 强烈推荐阅读 [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way)、[《如何向开源社区提问题》](https://github.com/seajs/seajs/issues/545) 和 [《如何有效地报告 Bug》](https://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html)、[《如何向开源项目提交无法解答的问题》](https://zhuanlan.zhihu.com/p/25795393),更好的问题更容易获得帮助。
## 社区互助
如果您在使用的过程中碰到问题,可以通过下面几个途径寻求帮助,同时我们也鼓励资深用户通过下面的途径给新人提供帮助。
通过 Stack Overflow 或者 Segment Fault 提问时,建议加上 `ng-zorro-antd` 标签。
1. [Stack Overflow](https://stackoverflow.com/questions/tagged/ng-zorro-antd)(English)
2. [Segment Fault](https://segmentfault.com/t/ng-zorro)(中文)
3. [Discussions · NG-ZORRO/ng-zorro-antd](https://github.com/NG-ZORRO/ng-zorro-antd/discussions)
4. 加入钉钉 NG-ZORRO 自助服务群(中文)
---
---
order: 7
title: LLMs.txt
tag: new
---
本指南介绍如何让 AI 工具更好地理解 NG-ZORRO 组件库。
## 什么是 LLMs.txt?
我们支持通过 [LLMs.txt](https://llmstxt.org/) 文件向大语言模型(LLMs)提供 `ng-zorro-antd` 文档。此功能可帮助 AI 工具更好地理解我们的组件库、API 及使用模式。
## 可用资源
### LLMs.txt 聚合文件
我们提供多个聚合文件来帮助 AI 工具访问文档:
| 文件 | 说明 |
| ---------------------------------------------------------- | ------------------------------------------ |
| [llms.txt](https://ng.ant.design/llms.txt) | 导航文件,包含所有文档和组件的链接 |
| [llms-full.txt](https://ng.ant.design/llms-full.txt) | 完整的组件文档(英文),包含实现细节和示例 |
| [llms-full-cn.txt](https://ng.ant.design/llms-full-cn.txt) | 完整的组件文档(中文) |
### 单个组件文档
通过 `.md` 后缀直接访问单个组件文档:
- `https://ng.ant.design/components/button.en.md`(英文)
- `https://ng.ant.design/components/button.cn.md`(中文)
## 在 AI 工具中的使用
| 工具 | 说明 | 提示词 |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
| **Cursor** | 使用 `@Docs` 功能引入 LLMs.txt,或添加提示词到 `.cursor/rules`。[文档](https://docs.cursor.com/zh/context/@-symbols/@-docs) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
| **Windsurf** | 添加提示词到 `.windsurf/rules` 或使用 cascade memories。[文档](https://docs.windsurf.com/windsurf/cascade/memories) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
| **Claude Code** | 添加到 CLAUDE.md 或使用 `/memory` 持久化。[文档](https://docs.anthropic.com/en/docs/claude-code) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
| **GitHub Copilot** | 添加到 `.github/copilot-instructions.md`。[文档](https://docs.github.com/zh/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
| **Codex** | 添加到 `.codex/settings.json` 或 AGENTS.md。[文档](https://github.com/openai/codex) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
| **Gemini CLI** | 使用 `--context` 参数或添加到 `.gemini/config.json`。[文档](https://ai.google.dev/gemini-api/docs?hl=zh-cn) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
| **Trae** | 添加到项目的知识源设置中。[文档](https://trae.ai/docs) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
| **Qoder** | 添加到 `.qoder/config.yml` 或在对话中使用 `@docs`。[文档](https://docs.qoder.com/) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
| **Neovate Code** | 运行 `neovate` 并使用提示词描述任务。[文档](https://github.com/neovateai/neovate-code) | `阅读 https://ng.ant.design/llms-full-cn.txt 并理解 NG-ZORRO 组件库,在编写 NG-ZORRO 代码时使用这些知识。` |
---
---
order: 7
title: 全局配置项
---
我们给众多组件添加了**全局配置**功能,你可以通过全局配置来定义组件的默认行为,从而减少在模板中需要写的代码(让你的代码更加清爽),还能在运行时修改全局配置项。
## 如何使用
想要为某些组件提供默认配置项, 可以使用 `provideNzConfig` 函数,传入一个符合 `NzConfig` 接口的对象。例如:
```typescript
import { NzConfig, provideNzConfig } from 'ng-zorro-antd/core/config';
const ngZorroConfig: NzConfig = {
// 注意组件名称没有 nz 前缀
message: { nzTop: 120 },
notification: { nzTop: 240 }
};
export const appConfig: ApplicationConfig = {
providers: [provideNzConfig(ngZorroConfig)]
};
```
这些全局配置项将会被注入 `NzConfigService` 当中并保存。
### 提供模板
一些组件支持传递模板 `TemplateRef` 作为默认参数,我们来了解一下如何做到这一点。
最简单的方式是在应用的根组件中调用 `NzConfigService` 的相关方法:
```typescript
import { NzConfigService } from 'ng-zorro-antd/core/config';
export class AppComponent implements OnInit {
private nzConfigService = inject(NzConfigService);
@ViewChild('nzIndicatorTpl', { static: true })
nzIndicator!: TemplateRef;
ngOnInit(): void {
this.nzConfigService.set('spin', { nzIndicator: this.nzIndicator });
}
}
```
然而这种方式可能会让你的 AppComponent 相当臃肿,并违反关注分离原则。
因此,当你的项目比较大时,我们建议你使用一个 `FactoryProvider`,如下所示:
```typescript
// The module-level Component which contains template references.
// Exporting is required for AOT compatibility
@Component({
template: `
`
})
export class GlobalTemplatesComponent {
@ViewChild('nzIndicatorTpl', { static: true })
nzIndicator!: TemplateRef;
}
// The Factory function
const nzConfigFactory = (): NzConfig => {
const environmentInjector = inject(EnvironmentInjector);
const { nzIndicator } = createComponent(component, { environmentInjector }).instance;
return {
spin: {
nzIndicator
}
};
};
export const appConfig: ApplicationConfig = {
providers: [
{
// The FactoryProvider
provide: NZ_CONFIG,
useFactory: nzConfigFactory
}
]
};
```
## 局部生效
开发者可以利用 Angular 自带的依赖注入机制,在特定组件内重新设定 `NZ_CONFIG`, 该设定不会影响该组件以外的配置。
```typescript
@Component({
providers: [
// 重设本地 NzConfigService
NzConfigService,
{
provide: NZ_CONFIG,
useValue: {
button: {
nzSize: 'large'
}
}
}
]
})
```
也可以使用 `useFactory` 将全局配置与区域配置合并后生效
> 注意:全局配置在初始化之后修改将不会影响该部分配置结果
```typescript
@Component({
providers: [
// 重设本地 NzConfigService
NzConfigService,
{
provide: NZ_CONFIG,
useFactory: () => {
// 获取全局 NzConfigService
const globalConfig = inject(NzConfigService, { skipSelf: true }).getConfig();
const localConfig = {
select: {
nzVariant: 'borderless'
}
};
// 合并全局配置与本地配置
const mergedConfig = {
...globalConfig,
...localConfig
};
return mergedConfig;
},
}
]
})
```
## 动态变更
你可以通过调用 `NzConfigService` 的 `set` 方法来改变某个组件的配置项,例如:
```typescript
import { NzConfigService } from 'ng-zorro-antd/core/config';
@Component({})
export class ChangeZorroConfigComponent {
private nzConfigService = inject(NzConfigService);
onChangeConfig() {
this.nzConfigService.set('button', { nzSize: 'large' });
}
}
```
所有的组件实例都会响应这些改变(只要它们没有被单独赋值)。
## 优先级说明
对于任何一个属性来说,各个来源的值的优先级如下:
**为组件的某个实例单独设置的值(通过模板或类似于 `service.create` 的方法)> 通过 `NZ_CONFIG` 提供的全局默认值(包括 `set` 方法) > NG-ZORRO 内置的默认值。**
例如,你想创建一个 NzNotification 组件:
1. 你在调用 `NzNotificationService.success` 时传递参数 `{ nzDuration: 6000 }`
2. 你通过 `NZ_CONFIG` 提供了全局默认值 `{ notification: { nzDuration: 5000 } }`
3. NG-ZORRO 内部默认值为 4500
最终该 Notification 将会显示 6000 毫秒。
## 可配置项
`NzConfig` 接口提供的类型定义信息能够帮助你找到所有支持全局配置项的组件和属性。另外,每个组件的文档都会指出哪些属性可以通过全局配置项的方式指定。
---
---
order: 6.1
title: 动态主题(实验性)
---
除了 [less 定制主题](/docs/customize-theme/zh) 外,我们还提供了 CSS Variable 版本以支持动态切换主题能力。
> 该功能通过动态修改 CSS Variable 实现,在 IE 中页面将无法正常展示
## 如何使用
### 引入 ng-zorro-antd.variable.min.css
替换当前项目引入样式文件为 CSS Variable 版本:
```diff
- @import "~ng-zorro-antd/ng-zorro-antd.min.css";
+ @import "~ng-zorro-antd/ng-zorro-antd.variable.min.css";
```
注:如果你使用了 `babel-plugin-import`,需要将其去除。
### 静态方法配置
利用全局配置项功能,在根注入器中根据注入令牌 `NZ_CONFIG` 提供一个符合 `NzConfig` 接口的对象,例如:
```typescript
import { NzConfig, provideNzConfig } from 'ng-zorro-antd/core/config';
const ngZorroConfig: NzConfig = {
// 注意组件名称没有 nz 前缀
theme: {
primaryColor: '#1890ff'
}
};
export const appConfig: ApplicationConfig = {
providers: [provideNzConfig(ngZorroConfig)]
};
```
这些全局配置项将会被注入 `NzConfigService` 当中并保存。
### 动态变更
你可以通过调用 `NzConfigService` 的 `set` 方法来改变 CSS Variable 样式配置项,例如:
```typescript
import { NzConfigService } from 'ng-zorro-antd/core/config';
@Component({
selector: 'app-change-zorro-config'
})
export class ChangeZorroConfigComponent {
private nzConfigService = inject(NzConfigService);
onChangeConfig() {
this.nzConfigService.set('theme', { primaryColor: '#1890ff' });
}
}
```
所有的组件实例都会响应这些改变(只要它们没有被单独赋值)。
## 冲突解决
默认情况下,CSS Variable 会以 `--ant` 作为前缀。当你的项目中引用多份 css 文件时,可以通过修改前缀的方式避免冲突。
### 编译 less
由于前缀变更,你需要重新生成一份对应的 css 文件。
```bash
lessc --js --modify-var="ant-prefix=custom" ng-zorro-antd/ng-zorro-antd.variable.less modified.css
```
### 相关变更
为了实现 CSS Variable 并保持原始用法兼容性,我们于 `ng-zorro-antd.xxx.less` 文件中添加了 `@root-entry-name: xxx;` 入口注入以支持 less 动态加载对应的 less 文件。一般情况下,你不需要关注该变化。
---
---
order: 8
title: 动画开关
tag: updated
---
> 从 v21 版本开始,NG-ZORRO 完全使用 [native animation](https://angular.cn/guide/animations) 实现动画效果,你可以按需移除 `@angular/animations` 依赖。
NG-ZORRO 允许开发者关闭动画效果,您可以通过添加对应指令或者配置来设置动画的开关,也可以通过全局配置关闭所有动画。
### 在全局或组件中关闭
`provideNoopAnimations` 已被标记为废弃,你可以通过 `provideNzNoAnimation` 来关闭动画。
```ts
import { provideNzNoAnimation } from 'ng-zorro-antd/core/animation';
// 在全局中关闭动画
export const appConfig: ApplicationConfig = {
providers: [
// ...
provideNzNoAnimation()
]
};
// 在组件中关闭动画
@Component({
providers: [
// ...
provideNzNoAnimation()
]
})
```
### 在模版中关闭
引入 `NzNoAnimationDirective` 指令,在期望关闭动画的组件上添加 `nzNoAnimation` 指令。
```html
```
### 在服务中关闭
在调用组件服务时传入以下配置来关闭动画。
#### Modal, Drawer
```ts
{
// ...
nzNoAnimation: true;
}
```
#### Notification, Message
```ts
{
// ...
nzAnimate: false;
}
```
### 关闭波浪效果
部分组件(如:Button)为了支持波纹效果,使用了动态样式,因此无法直接使用样式覆盖。
你可以通过 `provideNzWave` 或者使用 `provideNzNoAnimation` 来关闭波浪效果。
```ts
import { provideNzWave } from 'ng-zorro-antd/core/wave';
export const appConfig: ApplicationConfig = {
providers: [provideNzWave({ disabled: true })]
};
```
---
---
order: 3
title: 国际化
---
目前的默认文案是中文,如果需要使用其他语言,可以在初始化时进行配置,也可以在运行中随时修改,可以参考下面的方案。
你也可以在新建项目时通过 `ng add ng-zorro-antd` 设置国际化语言。
## 配置默认国际化语言
`ng-zorro-antd` 提供了几个配置型 token 用于全局配置国际化文案和日期,`NZ_I18N`用于国际化文案,`NZ_DATE_CONFIG`用于修改日期相关特性。
此外,我们默认使用 Angular 的语言包来进行日期格式化(需要引入相应的 Angular 语言包)。
另外,我们还提供了可选的 `NZ_DATE_LOCALE` 用于 date-fns 方式来格式化本地日期(依赖 [`date-fns`](https://date-fns.org/docs/I18n) 库,详见下方的`如何使用 date-fns 进行日期格式化`)。
```ts
/** 导入需要使用的 Angular 语言包 **/
import { registerLocaleData } from '@angular/common';
import en from '@angular/common/locales/en';
registerLocaleData(en);
/** 配置 ng-zorro-antd 国际化 **/
import { provideNzI18n, en_US } from 'ng-zorro-antd/i18n';
/** 静态配置 **/
export const appConfig: ApplicationConfig = {
providers: [
// ...
provideNzI18n(en_US)
]
};
```
## 与 Angular 应用本地化方案联动
当使用 Angular [应用本地化方案](https://angular.cn/guide/i18n) 时,可以根据 [LOCALE_ID](https://angular.cn/api/core/LOCALE_ID) 自动切换 `ng-zorro-antd` 默认语言
```typescript
/** 导入需要使用的语言包 **/
import { LOCALE_ID } from '@angular/core';
import { registerLocaleData } from '@angular/common';
import en from '@angular/common/locales/en';
import zh from '@angular/common/locales/zh';
registerLocaleData(en);
registerLocaleData(zh);
/** 配置 ng-zorro-antd 国际化 **/
import { en_US, provideNzI18n, zh_CN } from 'ng-zorro-antd/i18n';
/** 根据 LOCALE_ID 自动切换 ng-zorro-antd 语言 **/
export const appConfig: ApplicationConfig = {
providers: [
// ...
provideNzI18n(() => (inject(LOCALE_ID) === 'zh' ? zh_CN : en_US))
]
};
```
## 运行时修改
`ng-zorro-antd` 提供了 `NzI18nService` 服务用于动态修改国际化文案。
```ts
import { en_US, NzI18nService } from 'ng-zorro-antd/i18n';
class SomeComponent {
private i18n = inject(NzI18nService);
switchLanguage() {
this.i18n.setLocale(en_US);
}
}
```
注意:`en_US` 是语言包名称,以下表格也遵循同样的规则。
## 支持语言
| 语言包名 | 语言 |
| -------- | -------------------- |
| ar_EG | 阿拉伯 |
| az_AZ | 阿塞拜疆 |
| bg_BG | 保加利亚语 |
| bn_BD | 孟加拉语(孟加拉国) |
| by_BY | 白俄罗斯语 |
| ca_ES | 加泰罗尼亚语 |
| cs_CZ | 捷克语 |
| da_DK | 丹麦语 |
| de_DE | 德语 |
| el_GR | 希腊语 |
| en_AU | 英语(澳大利亚) |
| en_GB | 英语 |
| en_US | 英语(美式) |
| es_ES | 西班牙语 |
| et_EE | 爱沙尼亚语 |
| fa_IR | 波斯语 |
| fi_FI | 芬兰语 |
| fr_BE | 法语(比利时) |
| fr_CA | 法语(加拿大) |
| fr_FR | 法语 |
| ga_IE | 爱尔兰盖尔语 |
| gl_ES | 加利西亚语(西班牙) |
| he_IL | 希伯来语 |
| hi_IN | 印地语 |
| hr_HR | 克罗地亚语 |
| hu_HU | 匈牙利 |
| hy_AM | 亚美尼亚 |
| id_ID | 印度尼西亚语 |
| is_IS | 冰岛语 |
| it_IT | 意大利语 |
| ja_JP | 日语 |
| ka_GE | 格鲁吉亚语 |
| kk_KZ | 哈萨克语 |
| km_KH | 高棉语 |
| kmr_IQ | 北库尔德语 |
| kn_IN | 卡纳达语 |
| ko_KR | 韩语/朝鲜语 |
| ku_IQ | 库尔德语 |
| lt_LT | 立陶宛语 |
| lv_LV | 拉脱维亚语 |
| ml_IN | 马拉雅拉姆语 |
| mn_MN | 蒙古语 |
| ms_MY | 马来语 |
| nb_NO | 挪威 |
| ne_NP | 尼泊尔语 |
| nl_BE | 荷兰语(比利时) |
| nl_NL | 荷兰语 |
| pl_PL | 波兰语 |
| pt_BR | 葡萄牙语(巴西) |
| pt_PT | 葡萄牙语 |
| ro_RO | 罗马尼亚语 |
| ru_RU | 俄罗斯语 |
| sk_SK | 斯洛伐克语 |
| sl_SI | 斯洛文尼亚 |
| sr_RS | 塞尔维亚 |
| sv_SE | 瑞典语 |
| ta_IN | 泰米尔语 |
| th_TH | 泰语 |
| tr_TR | 土耳其语 |
| uk_UA | 乌克兰语 |
| ur_PK | 乌尔都语 (巴基斯坦) |
| vi_VN | 越南语 |
| zh_CN | 简体中文 |
| zh_HK | 繁体中文 |
| zh_TW | 繁体中文 |
## 如何使用 date-fns 进行日期格式化
对于日期的格式化,我们默认采用 Angular 的 DatePipe([语法参考](https://angular.cn/api/common/DatePipe)来实现(依赖Angular的locale语言包),但由于Angular自带的DatePipe并非按照ISO标准算法实现([issue #25380](https://github.com/angular/angular/issues/25380)),使用时周数的展示可能与预期不符(相关issue: [#2406](https://github.com/NG-ZORRO/ng-zorro-antd/issues/2406), [#2819](https://github.com/NG-ZORRO/ng-zorro-antd/issues/2819))。
所以我们新提供了`date-fns`方式([语法参考](https://date-fns.org/docs/format#description))来进行标准的日期格式化,您可以通过以下方式切换至 `date-fns`(切换后将影响所有日期类组件如Calendar/DatePicker的日期格式化):
```ts
// 在 App Config 中设置 NZ_DATE_LOCALE 的值,将激活 date-fns 方式的日期格式化展示
import { enUS, ja } from 'date-fns/locale';
export const appConfig: ApplicationConfig = {
providers: [{ provide: NZ_DATE_LOCALE, useValue: enUS }]
};
// 运行时切换语言为日语
import { NzI18nService } from 'ng-zorro-antd/i18n';
export class AppComponent {
private i18n = inject(NzI18nService);
switchLanguage() {
this.i18n.setDateLocale(ja);
}
}
```
切换成功后,可以选择移除掉对 Angular Locales 包的依赖(删除下方代码)来减小打包体积(前提是代码对其无依赖):
```ts
// 以下代码可根据需要移除
import { registerLocaleData } from '@angular/common';
import en from '@angular/common/locales/en';
registerLocaleData(en);
```
### NZ_DATE_CONFIG 日期全局配置
默认配置如下:
```ts
{
/** 指定哪一天为一周的开始(null表示采用内部默认值,0表示星期日,1表示星期一,以此类推) */
firstDayOfWeek: null;
}
```
## date-fns 支持语言
[https://date-fns.org/docs/I18n#supported-languages](https://date-fns.org/docs/I18n#supported-languages)
## 如何更改默认国际化语言包配置
`ng-zorro` 中有些组件的文本依赖于国际化文本,例如 `nz-pagination` 中的 `size changer`, 这时候你可以修改国际化配置来更改 `size changer` 中的文本内容:
```ts
import { en_US, provideNzI18n } from 'ng-zorro-antd/i18n';
const customLanguagePack = {
en_US,
...{
Pagination: {
items_per_page: 'per page'
}
}
};
export const appConfig: ApplicationConfig = {
providers: [provideNzI18n(customLanguagePack)]
};
```
---
---
order: 6
title: 定制主题
---
Ant Design 设计规范上支持一定程度的样式定制,以满足业务和品牌上多样化的视觉需求,包括但不限于主色、圆角、边框和部分组件的视觉定制。

Ant Design 的样式使用了 [Less](https://lesscss.org/) 作为开发语言,并定义了一系列全局/组件的样式变量,你可以根据需求进行相应调整,[默认样式变量](https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/components/style/themes/default.less)
> Ant Design React 的主题定制文件在 `ng-zorro-antd` 中同样可以使用。
## 使用预定义主题
### 配置非定制主题
在初始化项目时,运行 `ng add ng-zorro-antd` 命令之后,选择不配置自定义主题文件,你的项目则会自动在 `angular.json` 中配置:
```json
{
"build": {
"options": {
"styles": ["./node_modules/ng-zorro-antd/ng-zorro-antd.min.css"]
}
}
}
```
当然,你也可以在 `angular.json` 中手动添加该配置。
### 官方主题
除了默认主题外,我们还提供了三种官方主题,欢迎在项目中试用,并且给我们提供反馈。
- 🌑 暗黑主题
- 📦 紧凑主题
- ☁️ 阿里云主题
#### 方式一: Less
在样式文件全量,如 `style.less`,中引入 `ng-zorro-antd.less`、`ng-zorro-antd.dark.less`、`ng-zorro-antd.compact.less` 或 `ng-zorro-antd.aliyun.less` 覆盖主题变量。
```less
// 引入官方提供的默认 less 样式文件
@import '~ng-zorro-antd/ng-zorro-antd.less';
// 引入官方提供的暗黑 less 样式文件
//@import "~ng-zorro-antd/ng-zorro-antd.dark.less";
// 引入官方提供的紧凑 less 样式文件
//@import "~ng-zorro-antd/ng-zorro-antd.compact.less";
// 引入官方提供的阿里云 less 样式文件
//@import "~ng-zorro-antd/ng-zorro-antd.aliyun.less";
```
#### 方式二: CSS
如果项目不使用 Less,可在 CSS 文件或者 `angular.json` 的 `styles` 字段中,全量引入 `ng-zorro-antd.css`、`ng-zorro-antd.dark.css`、`ng-zorro-antd.compact.css` 或者 `ng-zorro-antd.aliyun.css`。
样式文件中:
```css
@import '~ng-zorro-antd/ng-zorro-antd.css';
/*@import "~ng-zorro-antd/ng-zorro-antd.dark.css";*/
/*@import "~ng-zorro-antd/ng-zorro-antd.compact.css";*/
/*@import "~ng-zorro-antd/ng-zorro-antd.aliyun.css";*/
```
`angular.json` 中:
```json
{
"build": {
"options": {
"styles": ["node_modules/ng-zorro-antd/ng-zorro-antd.css"]
}
}
}
```
## 修改预定义主题
### 方式一:在 Less 中覆盖主题变量
#### 引入预定义主题文件
在 `src/styles.less` 里引入预定义主题文件 (也可以在初始化项目运行 `ng add ng-zorro-antd` 命令之后,选择配置自定义主题文件):
```less
// Custom Theming for NG-ZORRO
// For more information: https://ng.ant.design/docs/customize-theme/en
@import '../node_modules/ng-zorro-antd/ng-zorro-antd.less';
```
#### 自定义样式变量
引入官方主题文件之后,再根据实际需求自定义覆盖主题样式变量的参数。例如,在以下样例中通过修改 `@primary-color` 的数值将预定义默认主题的基础色修改为 `#f5222d`:
```less
// -------- 引入官方提供的 less 样式入口文件 -----------
@import '../node_modules/ng-zorro-antd/ng-zorro-antd.less';
// -------- 自定义参数覆盖 -----------
@primary-color: #f5222d;
```
### 方式二:webpack 中覆盖主题变量
#### 覆盖为预定义主题变量
在 webpack 中使用 less-loader 按需引入:
```javascript
const darkThemeVars = require('ng-zorro-antd/dark-theme');
const compactThemeVars = require('ng-zorro-antd/compact-theme');
module.exports = {
module: {
rules: [
{
test: /\.less$/,
loader: 'less-loader',
options: {
modifyVars: {
hack: `true;@import "${require.resolve('ng-zorro-antd/style/color/colorPalette.less')}";`,
...darkThemeVars,
...compactThemeVars
},
javascriptEnabled: true
}
}
]
}
};
```
#### 覆盖为定制主题变量
Angular CLI 提供了 [custom-webpack](https://www.npmjs.com/package/@angular-builders/custom-webpack) 的 builder,可以通过该 builder 轻松的调整 webpack 中 [less-loader](https://github.com/webpack-contrib/less-loader) 的配置来进行主题配置。
1. 在 `angular.json` 中引入 `ng-zorro-antd.less` 文件
```json
{
"styles": ["node_modules/ng-zorro-antd/ng-zorro-antd.less"]
}
```
2. 安装 `@angular-builders/custom-webpack` builder
```bash
npm i -D @angular-builders/custom-webpack
```
3. 新建 webpack 配置文件 `extra-webpack.config.js`
```javascript
module.exports = {
module: {
rules: [
{
test: /\.less$/,
loader: 'less-loader',
options: {
modifyVars: {
// 修改主题变量
'primary-color': '#1DA57A',
'link-color': '#1DA57A',
'border-radius-base': '2px'
},
javascriptEnabled: true
}
}
]
}
};
```
4. 在 `angular.json` 中配置自定义 builder
```diff
"architect": {
"build": {
- "builder": "@angular-devkit/build-angular:browser",
+ "builder": "@angular-builders/custom-webpack:browser",
"options": {
+ "customWebpackConfig": {
+ "path": "./extra-webpack.config.js",
+ "mergeStrategies": {
+ "module.rules": "append"
+ },
+ "replaceDuplicatePlugins": true
+ }
},
},
"serve": {
- "builder": "@angular-devkit/build-angular:dev-server",
+ "builder": "@angular-builders/custom-webpack:dev-server",
}
}
```
更多在 Angular CLI 中定制 webpack 的文章可以参考
- [Angular Builder Document](https://www.npmjs.com/package/@angular-builders/custom-webpack)
- [Angular CLI: Custom webpack Config](https://alligator.io/angular/custom-webpack-config/)
- [Customize Webpack Configuration in Your Angular Application](https://netbasal.com/customize-webpack-configuration-in-your-angular-application-d09683f6bd22)
全部可被自定义 less 变量可以参考 [这里](https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/components/style/themes/default.less)。
## 动态切换主题
我们为你准备了一个演示动态切换主题的项目,欢迎前往 [这里](https://github.com/yangjunhan/nz-themes) 查看。
### 配置 angular.json 文件
1. 样式预处理器选项 `stylePreprocessorOptions`
在`angular.json` 中配置样式预处理器选项 `stylePreprocessorOptions` 并添加路径:
```json
"stylePreprocessorOptions": {
"includePaths": [
"src/styles/themes"
]
},
```
于是,在项目组件样式文件里,无需相对路径,`src/styles/themes` 路径下的任意文件定义文件都可以从项目中的任何位置导入,例如:
```less
// A relative path works
@import 'src/styles/themes/mixin';
// But now this works as well
@import 'mixin';
```
2. styles 里的 `bundleName` 和 `inject`
如果需要在项目运行时动态切换主题,你就需要为构建器配置好每个主题的全局上下文样式文件。继续以默认和暗黑主题为例,请在 `angular.json` 的 `styles` 选项数组里进行如下配置:
```json
"styles": [
"src/styles.less",
{
"input": "src/styles/default.less",
"bundleName": "default",
"inject": false
},
{
"input": "src/styles/dark.less",
"bundleName": "dark",
"inject": false
}
],
```
`bundleName` 指捆绑包的自定义 CSS 文件名称,方便了之后切换主题创建所需的 link 标签的 href 属性。`inject` 默认为 `true`,会将捆绑包注入。为了动态主题切换则需要将主题捆绑包从注入中排除。
### 多主题定制
在多主题项目的情景下,每一个主题都应该创建一个单独的样式入口文件。为了更好管理多主题项目,我们推荐将所有类似的主题定义入口文件放在 `src/styles` 路径下。例如,当你的项目有默认和暗黑主题时,你的项目 styles 可能会是以下结构:
src/styles
├── dark.less
├── default.less
└── themes
├── base.less
├── dark.less
├── default.less
└── mixin.less
`src/styles/` 下的主题文件是主题入口文件,它的作用是引入预定义官方 Less 样式入口文件以及 `src/styles/themes/` 下对应的主题样式定制文件。例如,`src/styles/dark.less` 入口文件含有以下代码:
```less
@import '../../node_modules/ng-zorro-antd/ng-zorro-antd';
@import './themes/dark';
```
相应的,`src/styles/themes/dark.less` 文件负责定制暗黑主题的样式:
```less
@import (multiple) '../../../node_modules/ng-zorro-antd/src/style/themes/dark';
@import './base';
@layout-sider-background: @component-background;
@layout-header-background: @component-background;
```
> 当引入对应的预定义主题样式变量文件的时候,会遇到 `.less` 样式文件名跟项目自己的主题样式文件名是一样的情况,这样的话单单使用 `@import '';` 是无法生效的。这种时候, Less 为我们提供了 `@import (multiple) '';` 的 `multiple` 方法来引入这些同名的 `.less` 文件。
注意,如果存在所有主题通用的样式变量,还可以引入一个统一的 `base.less` 基本样式文件并在每个主题样式定制文件中引入它:
```less
// base.less 定制通用样式变量
@margin-md: 17px;
```
### 切换主题
切换主题包括两部分,一是切换项目组件主题,二是切换预定义主题。
#### 切换项目组件主题
Angular 目前默认的模板和 CSS 样式使用的样式封装策略是 `ViewEncapsulation.Emulated`,也就是使用垫片 CSS 来模拟原生行为。根据不同的样式封装策略,Angular 会将项目组件样式以不同方式打包进 JS 文件里。
切换项目组件主题的策略是在定制项目组件样式时,会通过 html 里的代表主题 class 的 `className`,例如 `default` 和 `dark`,以切换打包好的主题。
但是,在每一个项目组件样式文件里根据以下格式写样式会很繁琐:
```less
html {
&.default {
@import 'default';
// 组件样式
...;
}
&.dark {
@import 'dark';
// 组件样式
...;
}
}
```
> 注意,由于已经配置了样式预处理器选项 `stylePreprocessorOptions` 里的路径 `src/styles/themes`,这里的 `@import` 不需要完整的相对路径。
更好的实现方式是,在上文提到的 `mixin.less` 中定义一个 Mixin `.themeMixin(@rules)`:
```less
.themeMixin(@rules) {
html {
&.default {
@import './default.less';
@rules();
}
&.dark {
@import './dark.less';
@rules();
}
}
}
```
并在所有的项目组件样式文件里,只需要将所有样式传入 `.themeMixin(@rules)` 里即可:
```less
@import 'mixin'; // 同样的,不需要完整的相对路径
.themeMixin({
:host {
// 组件样式
...
}
});
```
#### 切换预定义主题
切换预定义主题样式文件则是需要动态创建 `link` 标签,将样式文件动态加载在应用中,并移除上个主题的 `link` 标签。
```ts
private loadCss(href: string, id: string): Promise {
return new Promise((resolve, reject) => {
const style = document.createElement('link');
style.rel = 'stylesheet';
style.href = href;
style.id = id;
style.onload = resolve;
style.onerror = reject;
document.head.append(style);
});
}
```
这里的 `href` 将指代上文配置的[捆绑包](/docs/customize-theme/zh#配置-angular-json-文件)的路径,也就是 `bundleName`的路径。
#### 同步两种主题切换
项目组件样式会被打包进 js 文件,因此在切换 html 的 `className` 的时候主题样式会立即生效。另一方面,动态地加载 CSS 预定义主题文件却是需要时间完成的。如果两个操作同时进行,页面则会出现一部分是立即生效的项目组件样式,另一部分是切换主题加载之前的样式。因此,整个切换主题 `className` 操作需要包裹在 `Promise` 里等待 CSS 文件加载完成后才执行。
```ts
private removeUnusedTheme(theme: ThemeType): void {
document.documentElement.classList.remove(theme);
const removedThemeStyle = document.getElementById(theme);
if (removedThemeStyle) {
document.head.removeChild(removedThemeStyle);
}
}
loadTheme(firstLoad = true): Promise {
const theme = this.currentTheme;
if (firstLoad) {
document.documentElement.classList.add(theme);
}
this.loadCss(`${theme}.css`, theme).then(
e => {
if (!firstLoad) {
document.documentElement.classList.add(theme);
}
this.removeUnusedTheme(this.previousTheme);
resolve(e);
},
e => reject(e)
);
}
```
注意:第一次加载首先需要先将用户默认的项目组件主题加入 html 里,而不是包进 Promise 里,否则开始有一段时间会出现没有主题 `className` 的情况。
## Q&A
---
---
order: 11
title: 常见问题
---
更多常见问题请搜索标有 FAQ 的 issue。
### Angular 是不是打出来的包很大? `ng-zorro-antd` 打包大小如何?
Angular 的 hello-world 项目(包含路由、动画与 Http 等模块) gzip 之后大概 `30KB`,`ng-zorro-antd` 的官网(包含所有组件,懒加载)打包后 gzip 之后为 `287KB`。这与 React 或者 Vue 增加路由、动画、Http 等模块之后 gzip 的体积不会有太大差异。
如果碰到了打包大小问题,首先请确定使用了 `ng build --prod` 正确的方式进行了打包,如果除 `ng-zorro-antd` 之外还引入了其他第三方组件库,你可以通过 `ng build --prod --sourceMap=true` 命令生成 sourcemap 文件后,再通过 source-map-explorer 检查每个模块所占用的体积,具体操作可以参考[官方文档](https://angular.cn/guide/deployment#inspect-the-bundles)。
### Angular 是不是过时了,运行会慢吗?`ng-zorro-antd` 性能如何?
Angular 与 angular.js 不是同一种前端框架,angular.js 发布的时间在 2010 年 10 月份,而 Angular 诞生时间在 2016 年 9 月份,比 React 和 Vue 的诞生时间都要晚。
总体而言 Angular Vue 与 React 三种框架的运行速度没有太大差异,也不会是你项目运行时快慢的决定因素,具体的性能参数可以参考[该项目](https://github.com/krausest/js-framework-benchmark)。`ng-zorro-antd` 的所有组件均为原生 Angular 组件,并且默认运行在 `OnPush` 模式下,能够保证以 Angular 支持的最优速度运行。
### 我可以在 Angular 其他版本中使用 ng-zorro-antd 吗?
`ng-zorro-antd` 与 `@angular/core` 保持相同的主版本号,例如 `ng-zorro-antd@8` 支持 `@angular/core@8` 版本,依次类推,为了获得最好的性能,推荐升级至最新版本的 Angular。升级 Angular 可以参考[此文档](https://angular.cn/update-guide)。
### 我可以只使用 ng-zorro-antd 的部分组件吗?
`ng-zorro-antd` 的所有组件均支持单独导入使用,与其他的流行组件库可以混用。
### ng-zorro-antd 为什么使用 less 定制主题? 我能使用 sass 吗?
ng-zorro-antd 的设计规范遵从 ant design,因此同样使用了 less 文件来定制主题,`@angular/cli` 支持同一个项目中混用多种 css 预处理器, 与 sass 等文件不会互相干扰。
### ng-zorro-antd 能和 d3, echarts ...一起使用吗?
ng-zorro-antd 本质上是组件库,与用户自己写的 `@Component` 没有任何的区别,也不会与第三方库产生冲突。
### Can't Bind to since it isn't a known property of
如果使用多 Module 管理方式,NG-ZORRO 的模块需要在每个子 Module 中都要 import,或者在 `ShareModule` 中 export,可以参考[官方文档](https://angular.cn/guide/ngmodules/sharing)。
### Expression Changed After It Has Been Checked Error 错误
Angular 的数据流是单向数据流,违反数据流走向会引起该问题,[这篇文章](https://blog.angularindepth.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4)会帮助你理解原因。
### Can't bind to 'formGroup' since it isn't a known property of 'form'
使用 Reactive Forms 需要额外引入 `ReactiveFormsModule`,可以参考[官方文档](https://angular.cn/guide/forms/reactive-forms)。
### 模板中 `[nzValue]="data"` `nzValue="data"` 与 `nzValue="{{data}}"` 有什么区别
`nzValue="data"` 组件收到的是字符串 `data`,`nzValue="{{data}}"` 等价于 `[nzValue]="data.toString()"`。如果你需要传入 `number` 或者 `boolean` 类型时,应当使用 `[nzValue]="data"` 的方式。
### 数据修改后页面为什么没有更新
为了获得更好的性能,NG-ZORRO 所有组件都运行在 [OnPush](https://angular.cn/guide/components/advanced-configuration#changedetectionstrategy) 模式下,这意味着对 `@Input()` 数据的 mutate 将不会生效,请使用 immutable 方式操作数组或者对象。
```typescript
// 增加数据
this.dataSet = [
...this.dataSet,
{
key: `${this.i}`,
name: `Edward King ${this.i}`,
age: '32',
address: `London, Park Lane no. ${this.i}`
}
];
// 删除数据
this.dataSet = this.dataSet.filter(d => d.key !== i);
```
开发者也可以使用 [immer](https://immerjs.github.io/immer/docs/introduction) 获得更好的操作体验
### 我的页面卡死了,函数不停的在执行
在 Angular 的模板表达式中,绑定带有副作用的属性或者方法都是[危险的](https://angular.cn/guide/template-syntax#avoid-side-effects),如果你违反了这条规则,很可能会造成性能下降甚至引起死循环。以下的代码会在页面中不停输出 `I will run every time`,因为 `console.log` 本身是一种副作用函数。
```typescript
@Component({
template: ` `
})
export class BugComponent {
value(): string {
console.log('I will run every time');
return 'value';
}
}
```
### 怎样才能进一步提高 Angular 项目性能?
推荐 [https://web.dev/angular](https://web.dev/angular) 的系列文章
### 为什么我的 ISSUE 会被关闭
ISSUE 列表是为了 开发者 和 用户 追踪相关的开发进度而设计的,这意味 ISSUE 只接受 bug 报告或是新功能请求 (feature requests),这意味着我们不接受用法问题。
另外为了给予 更具体的工作更高的优先级和提高 ISSUE 处理的效率,未按照 格式提交的 ISSUE 也将会被立刻自动关闭。
### 有些特性为什么不会被支持
`ng-zorro-antd` 是 Angular 版本 Ant Design 的实现,这意味着只有 Ant Design 支持的交互、功能 才会被 `ng-zorro-antd` 实现。
### 浏览器兼容性问题
首先请确定浏览器版本得到了 Angular 的[官方支持](https://github.com/angular/angular),并正确引入了 [polyfill](https://angular.cn/reference/versions#polyfills) 文件,另外有些组件的部分使用方式不支持部分浏览器(例如 flex显示方式),如果不是以上问题,请提 ISSUE 给我们。
### 官网能正常工作,相同的用法本地运行有问题,是组件库的 BUG 吗?
不会,NG-ZORRO 的官网使用在 npm 上发布的相同版本构建,所有的构建日志都可以在 [Azure](https://dev.azure.com/ng-zorro/NG-ZORRO) 查看,请仔细检查本地运行环境(版本,其他依赖包)等问题。
### Angular的相关问题在哪里提问
除了Angular的官方文档和相关的论坛之外,Angular的相关问题可以在 Google 或者 百度 上搜索 `关键字 -angularjs` 来避免 `angularjs` 的干扰,例如 `angular ngmodel -angularjs` 就可以获得 Angular 关于 `ngModel` 的相关文章。
---
---
order: 1
title: 快速上手
---
NG-ZORRO 致力于提供给程序员**愉悦**的开发体验。
官方指南假设你已了解关于 HTML、CSS 和 JavaScript 的中级知识,并且已经完全掌握了 Angular 及配套设施的正确开发方式。如果你刚开始学习前端或者 Angular ,将框架作为你的第一步可能不是最好的主意 —— 掌握好基础知识再来吧!
## 在线演示
最简单的使用方式参照以下 StackBlitz 演示,也推荐 Fork 本例来进行 `Bug Report`,注意不要在实际项目中这样使用。
- [NG-ZORRO StackBlitz](https://stackblitz.com/edit/ng-zorro-antd-ivy)
## 第一个本地实例
实际项目开发中,你会需要对 TypeScript 代码的构建、调试、代理、打包部署等一系列工程化的需求。
我们强烈建议使用官方的 `@angular/cli` 工具链辅助进行开发,下面我们用一个简单的实例来说明。
### 安装脚手架工具
> 如果你想了解更多CLI工具链的功能和命令,建议访问 [Angular](https://angular.cn/cli) 了解更多。
```bash
$ npm install -g @angular/cli
```
### 创建一个项目
> 在创建项目之前,请确保 `@angular/cli` 已被成功安装。
执行以下命令,`@angular/cli` 会在当前目录下新建一个名称为 `PROJECT-NAME` 的文件夹,并自动安装好相应依赖。
```bash
$ ng new PROJECT-NAME
```
### 初始化配置
进入项目文件夹,执行以下命令后将自动完成 `ng-zorro-antd` 的初始化配置,包括引入国际化文件,导入模块,引入样式文件等工作。
```bash
$ ng add ng-zorro-antd
```
开发者可以通过增加参数来完成个性化的初始化配置,例如国际化或者自定义主题等,详细可以参考 [脚手架](/docs/schematics/zh) 部分。
### 开发调试
一键启动调试,运行成功后显示欢迎页面。
```bash
$ ng serve --port 0 --open
```
### 构建和部署
```bash
$ ng build --prod
```
文件会被打包到 `dist` 目录中。
## 手动安装
如果想自己维护工作流,理论上你可以利用 Angular 生态圈中的 各种脚手架进行开发,如果遇到问题可参考我们所使用的 [配置](https://github.com/NG-ZORRO/ng-zorro-antd/tree/master/integration) 进行定制。
### 安装组件
```bash
$ npm install ng-zorro-antd --save
```
### 引入样式
#### 使用全部组件样式
该配置将包含组件库的全部样式,如果只想使用某些组件请查看 [使用特定组件样式](/docs/getting-started/zh#使用特定组件样式) 配置。
在 `angular.json` 中引入了
```json
{
"styles": ["node_modules/ng-zorro-antd/ng-zorro-antd.min.css"]
}
```
在 `style.css` 中引入预构建样式文件
```css
@import '~ng-zorro-antd/ng-zorro-antd.min.css';
```
在 `style.less` 中引入 less 样式文件
```less
@import '~ng-zorro-antd/ng-zorro-antd.less';
```
#### 使用特定组件样式
> 由于组件之间的样式也存在依赖关系,单独引入多个组件的 CSS 可能导致 CSS 的冗余。
使用特定组件样式时前需要先引入基本样式(所有组件的共用样式)。
在 `style.css` 中引入预构建样式文件
```css
@import '~ng-zorro-antd/style/index.min.css'; /* 引入基本样式 */
@import '~ng-zorro-antd/button/style/index.min.css'; /* 引入组件样式 */
```
在 `style.less` 中引入 less 样式文件
```less
@import '~ng-zorro-antd/style/entry.less'; /* 引入基本样式 */
@import '~ng-zorro-antd/button/style/entry.less'; /* 引入组件样式 */
```
### 引入组件模块
最后你需要将想要使用的组件模块引入到你的组件中。
以下面的 `NzButtonModule` 模块为例:
```ts
import { Component } from '@angular/core';
import { NzButtonModule } from 'ng-zorro-antd/button';
@Component({
imports: [NzButtonModule]
})
export class AppComponent {}
```
然后在模板中使用:
```html
```
# 注意事项
- `ng-zorro-antd` 已经包含了 `@angular/cdk/overlay-prebuilt.css` 浮层样式,无需额外导入。
## 其他
- [国际化配置](/docs/i18n/zh)
- [自定义主题](/docs/customize-theme/zh)
- [使用图标](/components/icon/zh)
---
---
order: 9
title: 文字方向
---
设置文字方向(LTR / RTL)。
## 设置默认方向
在文档 `body` 或者 `html` 标签上设置 `dir` 属性。
```html
```
## 在模版中设置
引入 Angular CDK bidi 模块
```typescript
import { BidiModule } from '@angular/cdk/bidi';
```
在模版中为应用或其后代设置方向。
```html
```
## 在服务中设置
例如对话框(Modal)服务。
```typescript
class MyComponent {
private modalService = inject(NzModalService);
private nzConfigService = inject(NzConfigService);
openModal(): void {
this.modal.create({ nzDirection: 'rtl' });
}
setDirWithConfig(): void {
this.nzConfigService.set('modal', { nzDirection: 'rtl' });
}
}
```
## 参考
- [Angular CDK Bidirectionality](https://material.angular.io/cdk/bidi/api)
- [dir - HTML | MDN](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/dir)
---
---
order: 2
title: 脚手架
---
使用脚手架可以更加方便的初始化项目,生成模板代码,节省开发时间。
> 脚手架部分完全基于 [Schematics](https://blog.angular.dev/schematics-an-introduction-dc1dfbc2a2b2) 部分进行开发。
## 项目初始化
在项目下运行命令 `ng add ng-zorro-antd` 跟随选项便可完成初始化配置,包括引入国际化文件,导入模块,引入样式文件等工作。
同时你可以通过选择预设的模板创建一个 Angular 项目,并在此基础上进行开发。
## 生成组件
快速生成模板代码,每个官网的代码演示都附有可生成的模板,开发者可以通过展开每个组件的代码演示部分获取其生成代码。
### 命令
```bash
ng g ng-zorro-antd:[schematic] [options]
```
例如通过以下代码可以快速生成一个登录框组件
```bash
ng g ng-zorro-antd:form-normal-login login
```
---
---
order: 12
title: 贡献指南
---
这篇指南会指导你如何为 NG-ZORRO 贡献一份自己的力量,请在你要提 issue 或者 pull request 之前花几分钟来阅读一遍这篇指南。
## 行为准则
我们有一份 [行为准则](https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/CODE_OF_CONDUCT.md),希望所有的贡献者都能遵守,请花时间阅读一遍全文以确保你能明白哪些是可以做的,哪些是不可以做的。
## 透明的开发
我们所有的工作都会放在 [GitHub](https://github.com/NG-ZORRO/ng-zorro-antd) 上。不管是核心团队的成员还是外部贡献者的 pull request 都需要经过同样流程的 review。
## Bugs
我们使用 [GitHub Issues](https://github.com/NG-ZORRO/ng-zorro-antd/issues) 来做 bug 追踪。 如果你想要你发现的 bug 被快速解决,最好的办法就是通过我们提供的 [issue 小助手](https://ng.ant.design/issue-helper/#/zh) 来提 issue。 并且能使用这个 [模板](https://stackblitz.com/edit/ng-zorro-antd-ivy) 来提供重现。
在你报告一个 bug 之前,请先确保已经搜索过已有的 issue 和阅读了我们的 [常见问题](docs/faq/zh)。
## 新增功能
如果你有改进我们的 API 或者新增功能的想法,我们同样推荐你使用我们提供的 [issue 小助手](https://ng.ant.design/issue-helper/#/zh) 来新建一个添加新功能的 issue。
## 第一次贡献
如果你还不清楚怎么在 GitHub 上提 Pull Request ,可以阅读下面这些文章来学习:
- [如何为开源做贡献](https://opensource.guide/zh-cn/how-to-contribute/)
- [第一次参与开源](https://github.com/firstcontributions/first-contributions/blob/master/translations/README.chs.md)
为了能帮助你开始你的第一次尝试,我们用 [Good First Issue](https://github.com/NG-ZORRO/ng-zorro-antd/labels/good%20first%20issue) 标记了一些比较比较容易修复的 bug 和小功能。这些 issue 可以很好地做为你的首次尝试。
如果你打算开始处理一个 issue,请先检查一下 issue 下面的留言以确保没有别人正在处理这个 issue。如果当前没有人在处理的话你可以留言告知其他人你将会处理这个 issue,以免别人重复劳动。
如果之前有人留言说会处理这个 issue 但是一两个星期都没有动静,那么你也可以接手处理这个 issue,当然还是需要留言告知其他人。
## 贡献代码
NG ZORRO 团队会关注所有的 Pull Request,我们会 review 以及合并你的代码,也有可能要求你做一些修改或者告诉你我们为什么不能接受这样的修改。
**在你发送 Pull Request 之前**,请确认你是按照下面的步骤来做的:
1. 在项目根目录下运行了 `npm install`。
2. 如果你修复了一个 bug 或者新增了一个功能,请确保写了相应的测试,这很重要。
3. 确认所有的测试都是通过的 `npm run test`。
4. 确保你的代码通过了 lint 检查 `npm run lint`。
5. 确保你的代码在提交之前经过了正确的 [Rebase](https://www.digitalocean.com/community/tutorials/how-to-rebase-and-update-a-pull-request)。
6. 确保你的提交信息符合[我们的 commit 规范](https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/CONTRIBUTING.md#-commit-message-guidelines)。
## 如何提出 Pull Request
1. fork `ng-zorro-antd` 仓库,以下所有操作均在 fork 之后的仓库上执行
2. 在 `master` 分支运行:`git remote add upstream https://github.com/NG-ZORRO/ng-zorro-antd.git`
3. 在 `master` 分支运行: `git pull upstream master`
4. 在 `master` 分支运行: `git push origin master`
5. 切换到你要工作的 feature 分支 (例如有一个分支叫 `docs-fix`): `git checkout docs-fix`
6. 在 `docs-fix` 分支运行: `git rebase origin/master`
7. 在 `docs-fix` 分支修改代码,并 commit: `git commit -a`,按照我们 [commit 规范](https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/CONTRIBUTING.md#-commit-message-guidelines)进行填写。
8. 推送代码 `git push` (可能需要 `-f`)
9. 在 Github 上发起 Pull Request 请求
## 开发流程
在你 clone 了 `ng-zorro-antd` 的代码并且使用 `npm install` 安装完依赖后,你还可以运行下面几个常用的命令:
- `npm start` 在本地运行 `NG-ZORRO` 的网站。
- `npm run lint` 检查代码风格。
- `npm test` 运行测试。
- `npm run test:watch [name]` 运行某文件测试,并监视变化。
- `npm run build:lib` 构建 `ng-zorro-antd` 到 `publish` 目录。
如果在开发过程中遇到问题,可查看 GitHub 上的[开发指南](https://github.com/NG-ZORRO/ng-zorro-antd/wiki/%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97)。
---
# Components
---
category: Components
subtitle: Cron 表单
type: 数据录入
title: Cron Expression
cols: 1
experimental: true
description: 显示和编辑 cron 表达式。
---
## 何时使用
需要在表单中使用 cron 格式验证时使用。
## API
别忘记先安装 cron-parser:
```sh
npm install cron-parser
```
### nz-cron-expression
| 参数 | 说明 | 类型 | 默认值 |
| --------------------- | ---------------------- | ----------------------------- | --------- |
| `[nzType]` | cron 规则类型 | `'linux'|'spring'` | `linux` |
| `[nzSize]` | 设置输入框大小 | `'large'|'small'|'default'` | `default` |
| `[nzDisabled]` | 禁用 | `boolean` | `false` |
| `[nzBorderless]` | 是否隐藏边框 | `boolean` | `false` |
| `[nzCollapseDisable]` | 隐藏折叠面板 | `boolean` | `false` |
| `[nzExtra]` | 自定义渲染右侧的内容 | `TemplateRef` | - |
| `[nzSemantic]` | 自定义渲染下次执行时间 | `TemplateRef` | - |
## 注意
### 支持格式
```text
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ day of week (0 - 7, 1L - 7L) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31, L)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, optional)
```
---
---
category: Components
type: 通用
title: Pipes
cols: 1
experimental: true
description: 常用 Pipes 集合。
---
## 何时使用
引入 Pipe 后,像 angular 的默认 Pipe 一样使用
## API
### nzBytes
| 参数 | 说明 | 类型 | 默认值 |
| --------- | ------------------ | -------- | ------ |
| `decimal` | 保留小数位 | `number` | '0' |
| `from` | 当前值的单位 | `string` | 'B' |
| `to` | 转换到目标值的单位 | `string` | '' |
### nzToCssUnit
| 参数 | 说明 | 类型 | 默认值 |
| ------------- | -------- | -------- | ------ |
| `defaultUnit` | 默认单位 | `string` | 'px' |
### nzEllipsis
| 参数 | 说明 | 类型 | 默认值 |
| -------- | -------- | -------- | ------ |
| `length` | 截取长度 | `number` | '' |
| `suffix` | 替换字符 | `string` | '' |
### nzAggregate
| 参数 | 说明 | 类型 | 默认值 |
| -------- | -------- | ---------------------------------- | ------ |
| `method` | 聚合方式 | `'sum' \| 'max' \| 'min' \| 'avg'` | '' |
### nzSanitizer
| 参数 | 说明 | 类型 | 默认值 |
| ------ | -------------- | -------- | ------ |
| `type` | sanitizer 类型 | `string` | 'html' |
---
---
category: Components
subtitle: 上传
type: 数据录入
title: Upload
cover: 'https://gw.alipayobjects.com/zos/alicdn/QaeBt_ZMg/Upload.svg'
description: 文件选择上传和拖拽上传控件。
---
## 何时使用
上传是将信息(网页、文字、图片、视频等)通过网页或者上传工具发布到远程服务器上的过程。
- 当需要上传一个或一些文件时。
- 当需要展现上传的进度时。
- 当需要使用拖拽交互时。
## API
> 服务端上传接口实现可以参考 [jQuery-File-Upload](https://github.com/blueimp/jQuery-File-Upload/wiki)。
### nz-upload
| 参数 | 说明 | 类型 | 默认值 |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------ |
| `[nzAccept]` | 接受上传的文件类型, 详见 [input accept Attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept) | `string` | - |
| `[nzAction]` | 必选参数, 上传的地址 | `string \| ((file: NzUploadFile) => string \| Observable)` | - |
| `[nzDirectory]` | 支持上传文件夹([caniuse](https://caniuse.com/#feat=input-file-directory)) | `boolean` | `false` |
| `[nzBeforeUpload]` | 上传文件之前的钩子,参数为上传的文件,若返回 `false` 则停止上传。注意:**IE9** 不支持该方法;注意:务必使用 `=>` 定义处理方法。 | `(file: NzUploadFile, fileList: NzUploadFile[]) => boolean \| Observable` | - |
| `[nzCustomRequest]` | 通过覆盖默认的上传行为,可以自定义自己的上传实现;注意:务必使用 `=>` 定义处理方法。 | `(item) => Subscription` | - |
| `[nzData]` | 上传所需参数或返回上传参数的方法;注意:务必使用 `=>` 定义处理方法。 | `Object \| ((file: NzUploadFile) => Object \| Observable<{}>)` | - |
| `[nzDisabled]` | 是否禁用 | `boolean` | `false` |
| `[nzFileList]` | 文件列表,双向绑定 | `NzUploadFile[]` | - |
| `[nzLimit]` | 限制单次最多上传数量,`nzMultiple` 打开时有效;`0` 表示不限 | `number` | `0` |
| `[nzMaxCount]` | 限制上传数量。当为 1 时,始终用最新上传的文件代替当前文件 | `number\|undefined` | `undefined` |
| `[nzSize]` | 限制文件大小,单位:KB;`0` 表示不限 | `number` | `0` |
| `[nzFileType]` | 限制文件类型,例如:`image/png,image/jpeg,image/gif,image/bmp` | `string` | - |
| `[nzFilter]` | 自定义过滤器 | `UploadFilter[]` | - |
| `[nzHeaders]` | 设置上传的请求头部,IE10 以上有效;注意:务必使用 `=>` 定义处理方法。 | `Object \| ((file: NzUploadFile) => Object \| Observable<{}>)` | - |
| `[nzListType]` | 上传列表的内建样式,支持三种基本样式 `text`, `picture` 和 `picture-card` | `'text' \| 'picture' \| 'picture-card'` | `'text'` |
| `[nzMultiple]` | 是否支持多选文件,`ie10+` 支持。开启后按住 ctrl 可选择多个文件。 | `boolean` | `false` |
| `[nzName]` | 发到后台的文件参数名 | `string` | `'file'` |
| `[nzShowUploadList]` | 是否展示 uploadList, 可设为一个对象,用于单独设定 `showPreviewIcon`,`showRemoveIcon` 和 `showDownloadIcon` | `boolean \| { showPreviewIcon?: boolean, showRemoveIcon?: boolean, showDownloadIcon?: boolean }` | `true` |
| `[nzShowButton]` | 是否展示上传按钮 | `boolean` | `true` |
| `[nzWithCredentials]` | 上传请求时是否携带 cookie | `boolean` | `false` |
| `[nzOpenFileDialogOnClick]` | 点击打开文件对话框 | `boolean` | `true` |
| `[nzPreview]` | 点击文件链接或预览图标时的回调;注意:务必使用 `=>` 定义处理方法。 | `(file: NzUploadFile) => void` | - |
| `[nzPreviewFile]` | 自定义文件预览逻辑;注意:务必使用 `=>` 定义处理方法。 | `(file: NzUploadFile) => Observable` | - |
| `[nzPreviewIsImage]` | 自定义预览文件是否有效图像,一般用于图像 URL 为非标准格式;注意:务必使用 `=>` 定义处理方法。 | `(file: NzUploadFile) => boolean` | - |
| `[nzRemove]` | 点击移除文件时的回调,返回值为 false 时不移除。支持返回 `Observable` 对象;注意:务必使用 `=>` 定义处理方法。 | `(file: NzUploadFile) => boolean \| Observable` | - |
| `(nzChange)` | 上传文件改变时的状态 | `EventEmitter` | - |
| `[nzDownload]` | 点击下载文件时的回调,如果没有指定,则默认跳转到文件 url 对应的标签页 | `(file: NzUploadFile) => void` | 跳转新标签页 |
| ~~`[nzTransformFile]`~~ | ~~在上传之前转换文件。支持返回一个 Observable 对象~~ | ~~`(file: NzUploadFile) => NzUploadTransformFileType`~~ | - |
| `[nzIconRender]` | 自定义显示 icon | `TemplateRef<{ $implicit: NzUploadFile }>` | - |
| `[nzFileListRender]` | 自定义显示整个列表 | `TemplateRef<{ $implicit: NzUploadFile[] }>` | - |
#### nzChange
> 开始、上传进度、完成、失败都会调用这个函数。
文件状态改变的回调,返回为:
```js
{
file: { /* ... */ },
fileList: [ /* ... */ ],
event: { /* ... */ },
}
```
1. `file` 当前操作的文件对象。
```js
{
uid: 'uid', // 文件唯一标识
name: 'xx.png' // 文件名
status: 'done', // 状态有:uploading done error removed
response: '{"status": "success"}', // 服务端响应内容
linkProps: '{"download": "image"}', // 下载链接额外的 HTML 属性
}
```
2. `fileList` 当前的文件列表。
3. `event` 上传中的服务端响应内容,包含了上传进度等信息,高级浏览器支持。
#### nzCustomRequest
默认使用 HTML5 方式上传(即:使用 `HttpClient`),允许覆盖默认行为实现定制需求,例如直接与阿里云交互等。
`nzCustomRequest` 回调传递以下参数:
- `onProgress: (event: { percent: number }): void`
- `onError: (event: Error): void`
- `onSuccess: (body: Object, xhr?: Object): void`
- `data: Object`
- `filename: String`
- `file: File`
- `withCredentials: Boolean`
- `action: String`
- `headers: Object`
---
---
category: Components
subtitle: 下拉菜单
type: 导航
title: Dropdown
cover: 'https://gw.alipayobjects.com/zos/alicdn/eedWN59yJ/Dropdown.svg'
description: 向下弹出的列表。
---
## 何时使用
当页面上的操作命令过多时,用此组件可以收纳操作元素。点击或移入触点,会出现一个下拉菜单。可在列表中进行选择,并执行相应的命令。
## API
### [nz-dropdown]
| 参数 | 说明 | 类型 | 默认值 | 版本 |
| ---------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------- | -------------- | ------ |
| `[nzDropdownMenu]` | Dropdown 下拉菜单组件 | `NzDropdownMenuComponent` | - |
| `[nzDisabled]` | 菜单是否禁用 | `boolean` | - |
| `[nzPlacement]` | 菜单弹出位置 | `'bottomLeft' \| 'bottomCenter' \| 'bottomRight' \| 'topLeft' \| 'topCenter' \| 'topRight'` | `'bottomLeft'` |
| `[nzTrigger]` | 触发下拉的行为 | `'click' \| 'hover'` | `'hover'` |
| `[nzClickHide]` | 点击后是否隐藏菜单 | `boolean` | `true` |
| `[nzVisible]` | 菜单是否显示,可双向绑定 | `boolean` | - |
| `[nzOverlayClassName]` | 下拉根元素的类名称 | `string` | - |
| `[nzOverlayStyle]` | 下拉根元素的样式 | `object` | - |
| `(nzVisibleChange)` | 菜单显示状态改变时调用,参数为 nzVisible | `EventEmitter` | - |
| `[nzArrow]` | 下拉框箭头是否显示 | `boolean` | `false` | 20.2.0 |
菜单使用 [nz-menu](/components/menu/zh),还包括菜单项 `[nz-menu-item]`,分割线 `[nz-menu-divider]`。
> 注意:`nz-dropdown` 下的 `[nz-menu]` 默认不可选中。如果需要菜单可选中,可以指定 ``.
>
> `nz-dropdown-menu` 内 `[nz-menu]` 的 `nzMode` 只可以是默认值 `vertical`。
### nz-dropdown-menu
用于包裹菜单项,可以通过 `nzDropdownMenu` 模板变量导出后传入 `[nz-dropdown]` 和 `NzContextMenuService`。
> 注意:每个 `nz-dropdown-menu` 只能作为一个 `[nz-dropdown]` 的输入项
```html
Hover me
- 1st menu item
- 2nd menu item
- 3rd menu item
```
### NzContextMenuService
用于右键弹出下拉菜单,具体参见示例
| 方法/属性 | 说明 | 参数 | 返回 |
| --------- | ------------ | --------------------------------------------------------------------------- | ---------------------- |
| create | 创建右键菜单 | `($event:MouseEvent \| {x:number, y:number}, menu:NzDropdownMenuComponent)` | `EmbeddedViewRef` |
| close | 关闭右键菜单 | - | - |
## FAQ
### Q:滚动时浮层元素没有跟随滚动位置
默认情况下,浮层元素使用 `body` 作为滚动容器,如果使用了其他滚动容器,在自定义滚动容器元素上添加 [CdkScrollable](https://material.angular.dev/cdk/scrolling/api#CdkScrollable) 指令。
注意:您需要从 `@angular/cdk/scrolling` 导入 `CdkScrollable` 指令或 `ScrollingModule` 模块。
---
---
category: Components
subtitle: 二维码
type: 数据展示
title: QRCode
tag: 15.1.0
cover: 'https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*cJopQrf0ncwAAAAAAAAAAAAADrJ8AQ/original'
description: 能够将文本转换生成二维码的组件,支持自定义配色和 Logo 配置。
---
## 何时使用
当需要将文本转换成为二维码时使用。
## API
### nz-qrcode
| 参数 | 说明 | 类型 | 默认值 | 版本 |
| ------------------ | ------------------------------------------------------------------ | ------------------------------------------- | ----------- | ----------------- |
| `[nzValue]` | 扫描后的文本 | `string \| string[]` | - | `string[]`:21.0.0 |
| `[nzType]` | 渲染类型 | `'canvas'\|'svg'` | `canvas` | 21.0.0 |
| `[nzColor]` | 二维码颜色 | `string` | `'#000000'` |
| `[nzBgColor]` | 二维码背景颜色 | `string` | `'#FFFFFF'` |
| `[nzSize]` | 二维码大小 | `number` | `160` |
| `[nzPadding]` | 二维码填充 | `number` | `0` |
| `[nzIcon]` | 二维码中 icon 地址 | `string` | - |
| `[nzIconSize]` | 二维码中 icon 大小 | `number` | `40` |
| `[nzBordered]` | 是否有边框 | `boolean` | `true` |
| `[nzStatus]` | 二维码状态 | `'active'\|'expired'\|'loading'\|'scanned'` | `'active'` |
| `[nzStatusRender]` | 自定义状态渲染器 | `TemplateRef \| string` | - |
| `[nzLevel]` | 二维码容错等级 | `'L'\|'M'\|'Q'\|'H'` | `'M'` |
| `[nzBoostLevel]` | 如果启用,自动提升纠错等级,结果的纠错级别可能会高于指定的纠错级别 | `boolean` | `true` | 21.0.0 |
| `(nzRefresh)` | 点击"点击刷新"的回调 | `EventEmitter` | - |
## 注意
### 二维码无法识别
`nzValue` 保守的上限为 738 或更少的字符串。如果使用容错等级,`nzValue` 上限会降低。
### 关于二维码容错等级
容错等级也叫容错率,就是指二维码可以被遮挡后还能正常扫描,而这个能被遮挡的最大面积就是容错率。
通常情况下二维码分为 4 个容错等级:`L级` 可纠正约 `7%` 错误、`M级` 可纠正约 `15%` 错误、`Q级` 可纠正约 `25%` 错误、`H级`
可纠正约 `30%`
错误。并不是所有位置都可以缺损,像最明显的三个角上的方框,直接影响初始定位。中间零散的部分是内容编码,可以容忍缺损。当二维码的内容编码携带信息比较少的时候,也就是链接比较短的时候,设置不同的容错等级,生成的图片不会发生变化。
> 有关更多信息,可参阅相关资料:[https://www.qrcode.com/zh/about/error_correction](https://www.qrcode.com/zh/about/error_correction.html)
---
---
category: Components
subtitle: 代码编辑器
type: 数据录入
title: Code Editor
cols: 1
experimental: true
description: 基于 monaco-editor 的代码编辑器。
---
## 何时使用
需要在网页上渲染 monaco editor 时使用。
### 引入样式
```less
@import 'node_modules/ng-zorro-antd/code-editor/style/entry.less';
```
## API
别忘记先安装 monaco editor:
```sh
npm install monaco-editor
```
### 动态加载
如果你使用动态加载,你就需要在运行时加载 monaco editor 本身的资源。
在 `angular.json` 中添加:
```diff
"assets": [
+ {
+ "glob": "**/*",
+ "input": "./node_modules/monaco-editor/min/vs",
+ "output": "/assets/vs/"
+ }
],
```
这样就 OK 了!CodeEditor 组件在需要加载 monaco editor 时自动去 `/assets/vs/` 目录下查询。
如果你的静态资源都部署在 CDN 上,你就无须修改 `angular.json` 文件,但你必须通过 `NzConfigService` 配置 `assetsRoot` 属性。例如你将 monaco editor 的资源放置在了 https://mycdn.com/assets/vs ,你就需要传递 `{ assetsRoot: 'https://mycdn.com/assets' }` 。
> 如果你使用静态加载,你就无需修改 `angular.json` 文件,详见下文。
### 静态加载
有时候你可能需要在运行时加载 AMD module,但 monaco editor 的加载文件 loader.js patch 了 `window[require]` 属性,导致你无法使用 requireJS 等模块加载库,这时,你可以启用静态加载功能。
方法是使用 Microsoft 提供的 [monaco-editor-webpack-plugin](https://github.com/microsoft/monaco-editor-webpack-plugin) 插件。
1. 在 `app.config.ts` 中提供 `NZ_CONFIG` 的值,并设置 `codeEditor` 属性下的 `useStaticLoading` 为 `true` 。
2. 创建一个 webpack.partial.js 文件,根据插件文档进行相应的配置。
3. 使用自定义脚本加载器,例如 [ngx-build-plus](https://github.com/manfredsteyer/ngx-build-plus),在打包时加载这个 webpack 配置。
使用静态加载时,你无需在 `angular.json` 文件中注册 monaco editor 的资源。
### nz-code-editor
| 参数 | 说明 | 类型 | 默认值 |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | -------- |
| `[nzEditorMode]` | 编辑器的模式 | `normal`\|`diff` | `normal` |
| `[nzLoading]` | 加载中 | `boolean` | `false` |
| `[nzOriginalText]` | Diff 模式下,左半边的文本内容 | `boolean` | `false` |
| `[nzFullControl]` | 完全控制模式,此模式下组件不会帮助用户处理 `TextModel`,用户应当自行管理 monaco editor 实例 | `boolean` | `false` |
| `[nzEditorOption]` | 编辑器选项,[参考 monaco editor 的定义](https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.IEditorOptions.html) | `IEditorConstructionOptions` | `{}` |
| `[nzToolkit]` | 暴露快捷操作 | `TemplateRef` | - |
| `(nzEditorInitialized)` | 当编辑器组件初始化完毕之后派发事件 | `IStandaloneCodeEditor` \| `IStandaloneDiffEditor` | - |
#### 方法
| 名称 | 描述 |
| ---------- | ---------------- |
| `layout()` | 强制组件重新渲染 |
### 全局配置
你可以通过 `NzConfigService` 的 `set` 方法,设置 `CodeEditor` 组件的默认配置。
#### CodeEditorConfig
| 属性 | 说明 | 类型 | 默认值 |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------- |
| `assetsRoot` | 组件加载 monaco editor 资源文件的位置 | `string` \| `SafeUrl` | - |
| `defaultEditorOption` | 默认的编辑器设置,[参考 monaco editor 的定义](https://microsoft.github.io/monaco-editor/docs.html#interfaces/editor.IEditorConstructionOptions.html) | `IEditorConstructionOptions` | `{}` |
| `onLoad` | 当 monaco editor 资源加载完毕时触发的钩子,此时全局对象 `monaco` 可用 (monaco-editor 版本不小于 0.22.0 时需定义 `window.MonacoEnvironment = { globalAPI: true }`) | `() => void` | - |
| `onFirstEditorInit` | 当第一个编辑器请求初始化时触发的钩子 | `() => void` | - |
| `onInit` | 每个编辑器请求初始化时触发的钩子 | `() => void` | - |
| `useStaticLoading` | 使用静态加载 | `boolean` | `false` |
---
---
category: Components
type: 特色组件
title: CheckList
subtitle: 任务清单
cols: 1
tag: 19.1.0
cover: 'https://img.alicdn.com/imgextra/i2/O1CN01E9BUpE1TCyZry8ETC_!!6000000002347-2-tps-386-453.png'
description: 用于在项目中梳理任务流程。
---
## 何时使用
如果当前页面业务逻辑过于复杂,且带有较为强制的顺序流控制,那么你可以采用这个组件来帮你简化流程。
## API
### nz-check-list
| 参数 | 说明 | 类型 | 默认值 | 全局配置 |
| ------------------- | ---------------------- | ----------------------------- | ------- | -------- |
| `[nzItems]` | 任务清单元素 | `NzItemProps` | `[]` | - |
| `[nzVisible]` | 显示任务清单 | `boolean` | `false` | - |
| `[nzIndex]` | 当前所属位置 | `number` | `1` | - |
| `[nzProgress]` | 显示任务进度 | `boolean` | `true` | - |
| `[nzTriggerRender]` | 清单悬浮按钮的渲染模板 | `TemplateRef \| string` | - | - |
| `[nzTitle]` | 清单面板标题的渲染模板 | `TemplateRef \| string` | - | - |
| `[nzFooter]` | 清单面板底部的渲染模板 | `TemplateRef \| string` | - | - |
| `(nzHide)` | 隐藏清单的回调 | `EventEmitter` | `false` | - |
> `(nzHide)` 的回调值为是否不再显示清单。你可以在回调中存储数据到 `LocalStorage` 中,以避免再次显示清单。
### Interfaces
#### NzItemProps
| 参数 | 说明 | 类型 | 默认值 |
| ------------- | ------------------ | ----------------------------- | ------ |
| `key` | 清单元素的唯一 key | `string` | - |
| `description` | 清单元素描述内容 | `string` | - |
| `checked` | 当前清单是否完成 | `boolean` | - |
| `onClick` | 点击步骤触发的方法 | `(item: NzItemProps) => void` | - |
> `key` 为清单元素的唯一标识,如果不填写,则默认使用 `description` 作为 key。
---
---
category: Components
subtitle: 全局提示
type: 反馈
title: Message
cover: 'https://gw.alipayobjects.com/zos/alicdn/hAkKTIW0K/Message.svg'
description: 全局展示操作反馈信息。
---
## 何时使用
- 可提供成功、警告和错误等反馈信息。
- 顶部居中显示并自动消失,是一种不打断用户操作的轻量级提示方式。
## API
### NzMessageService
组件提供了一些服务方法,使用方式和参数如下:
- `NzMessageService.success(content, [options])`
- `NzMessageService.error(content, [options])`
- `NzMessageService.info(content, [options])`
- `NzMessageService.warning(content, [options])`
- `NzMessageService.loading(content, [options])`
| 参数 | 说明 | 类型 | 默认值 |
| ------- | ---------------------------------------- | ----------------------------- | ------ |
| content | 提示内容 | `string \| TemplateRef` | - |
| options | 支持设置针对当前提示框的参数,见下方表格 | `object` | - |
`options` 支持设置的参数如下:
| 参数 | 说明 | 类型 | 版本 |
| -------------- | --------------------------------- | ---------------------------- | ------ |
| nzDuration | 持续时间(毫秒),当设置为0时不消失 | `number` | |
| nzPauseOnHover | 鼠标移上时禁止自动移除 | `boolean` | |
| nzAnimate | 开关动画效果 | `boolean` | |
| nzData | 传递给自定义模板的数据 | `NzSafeAny` | |
| nzStyle | 自定义内联样式 | `NgStyleInterface \| string` | 20.4.0 |
| nzClass | 自定义 CSS class | `NgClassInterface \| string` | 20.4.0 |
还提供了全局销毁方法:
- `NzMessageService.remove(id)`: 移除特定id的消息,当id为空时,移除所有消息(该消息id通过上述方法返回值中得到)
### 全局配置
可以通过 `NzConfigService` 进行全局配置,详情请见文档中 [全局配置项](/docs/global-config/zh) 章节。
| 参数 | 说明 | 类型 | 默认值 |
| -------------- | ----------------------------------- | ------------------ | ------ |
| nzDuration | 持续时间(毫秒),当设置为 0 时不消失 | `number` | `3000` |
| nzMaxStack | 同一时间可展示的最大提示数量 | `number` | `7` |
| nzPauseOnHover | 鼠标移上时禁止自动移除 | `boolean` | `true` |
| nzAnimate | 开关动画效果 | `boolean` | `true` |
| nzTop | 消息距离顶部的位置 | `number \| string` | `24` |
| nzDirection | 消息文字方向 | `'ltr' \| 'rtl'` | - |
### NzMessageRef
当你调用 `NzMessageService.success` 或其他方法时会返回该对象。
```ts
export interface NzMessageRef {
messageId: string;
onClose: Subject; // 当 message 关闭时它会派发一个事件
}
```
---
---
category: Components
type: 布局
title: Divider
subtitle: 分割线
cover: 'https://gw.alipayobjects.com/zos/alicdn/5swjECahe/Divider.svg'
description: 区隔内容的分割线。
---
## 何时使用
- 对不同章节的文本段落进行分割。
- 对行内文字/链接进行分割,例如表格的操作列。
## API
### nz-divider
| 参数 | 说明 | 类型 | 默认值 | 版本 |
| ----------------- | -------------------------- | --------------------------------- | -------------- | ------ |
| `[nzDashed]` | 是否虚线 | `boolean` | `false` |
| `[nzType]` | 水平还是垂直类型 | `'horizontal' \| 'vertical'` | `'horizontal'` |
| `[nzText]` | 中间文字 | `string \| TemplateRef` | - |
| `[nzPlain]` | 文字是否显示为普通正文样式 | `boolean` | `false` |
| `[nzOrientation]` | 中间文字方向 | `'center' \| 'left' \| 'right'` | `'center'` |
| `[nzVariant]` | 分割线是虚线、点线还是实线 | `'dashed' \| 'dotted' \| 'solid'` | `'solid'` |
| `[nzSize]` | 分割线大小 | `'small' \| 'middle' \| 'large'` | - | 20.2.0 |
---
---
category: Components
subtitle: 分段控制器
type: 数据展示
title: Segmented
cover: 'https://gw.alipayobjects.com/zos/bmw-prod/a3ff040f-24ba-43e0-92e9-c845df1612ad.svg'
description: 用于展示多个选项并允许用户选择其中单个选项。
---
## 何时使用
- 用于展示多个选项并允许用户选择其中单个选项;
- 当切换选中选项时,关联区域的内容会发生变化。
## API
### nz-segmented
| 参数 | 说明 | 类型 | 默认值 | 全局配置 | 版本 |
| ----------------- | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------- | --------- | -------- | ------ |
| `[nzBlock]` | 将宽度调整为父元素宽度的选项 | `boolean` | `false` | |
| `[nzDisabled]` | 是否禁用 | `boolean` | `false` | |
| `[nzOptions]` | 数据化配置选项内容 | `string[] \| number[] \| Array<{ label: string; value: string \| number; icon: string; disabled?: boolean; }>` | - | |
| `[nzSize]` | 控件尺寸 | `large \| default \| small` | - | ✅ |
| `[nzShape]` | 形状 | `default \| round` | `default` | - | 20.3.0 |
| `[nzVertical]` | 排列方向 | `boolean` | `false` | - | 20.2.0 |
| `[nzName]` | 所有 `input[type="radio"]` 的 `name` 属性 | `string` | - | | 20.3.0 |
| `[ngModel]` | 当前选中项目的 value | `string \| number` | - | |
| `(nzValueChange)` | 当前选中项目变化时触发回调 | `EventEmitter` | - | |
| `(ngModelChange)` | 当前选中项目变化时触发回调 | `EventEmitter` | - | |
### label[nz-segmented-item]
| 参数 | 说明 | 类型 | 默认值 | 全局配置 |
| -------------- | -------- | ------------------ | ------- | -------- |
| `[nzIcon]` | 图标 | `string` | - | |
| `[nzValue]` | 值 | `string \| number` | - | |
| `[nzDisabled]` | 是否禁用 | `boolean` | `false` | |
---
---
category: Components
type: 布局
title: Splitter
subtitle: 分隔面板
tag: 19.2.0
cover: 'https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*f0SISaETY0wAAAAAAAAAAAAADrJ8AQ/original'
description: 自由切分指定区域。
---
## 何时使用
- 可以水平或垂直地分隔区域。
- 当需要自由拖拽调整各区域大小。
- 当需要指定区域的最大最小宽高时。
## API
### nz-splitter
| 参数 | 说明 | 类型 | 默认值 |
| ----------------- | ---------------- | ---------------------------- | -------------- |
| `[nzLayout]` | 布局方向 | `'horizontal' \| 'vertical'` | `'horizontal'` |
| `[nzLazy]` | 延迟渲染模式 | `boolean` | `false` |
| `(nzResizeStart)` | 开始拖拽之前回调 | `EventEmitter` | - |
| `(nzResize)` | 面板大小变化回调 | `EventEmitter` | - |
| `(nzResizeEnd)` | 拖拽结束回调 | `EventEmitter` | - |
### nz-splitter-panel
| 参数 | 说明 | 类型 | 默认值 |
| ----------------- | ------------------------------------------------- | ------------------------------------------------ | ------- |
| `[nzDefaultSize]` | 初始面板大小,支持数字 px 或者文字 '百分比%' 类型 | `number \| string` | - |
| `[nzMin]` | 最小阈值,支持数字 px 或者文字 '百分比%' 类型 | `number \| string` | - |
| `[nzMax]` | 最大阈值,支持数字 px 或者文字 '百分比%' 类型 | `number \| string` | - |
| `[nzSize]` | 受控面板大小,支持数字 px 或者文字 '百分比%' 类型 | `number \| string` | - |
| `[nzCollapsible]` | 快速折叠 | `boolean \| { start?: boolean; end?: boolean }` | `false` |
| `[nzResizable]` | 是否开启拖拽伸缩 | `boolean` | `true` |
---
---
category: Components
subtitle: 分页
type: 导航
title: Pagination
cols: 1
cover: 'https://gw.alipayobjects.com/zos/alicdn/1vqv2bj68/Pagination.svg'
description: 分页器用于分隔长列表,每次只加载一个页面。
---
## 何时使用
- 当加载/渲染所有数据将花费很多时间时;
- 可切换页码浏览数据。
## API
```html
```
### nz-pagination
| 参数 | 说明 | 类型 | 默认值 | 全局配置 | 版本 |
| ---------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------ | -------- | ------ |
| `[nzTotal]` | 数据总数 | `number` | - | - |
| `[nzPageIndex]` | 当前页数,可双向绑定 | `number` | `1` | - |
| `[nzPageSize]` | 每页条数,可双向绑定 | `number` | `10` | - |
| `[nzDisabled]` | 是否禁用 | `boolean` | `false` | - |
| `[nzShowQuickJumper]` | 是否可以快速跳转至某页 | `boolean` | `false` | ✅ |
| `[nzShowSizeChanger]` | 是否可以改变 `nzPageSize` | `boolean` | `false` | ✅ |
| `[nzSimple]` | 当添加该属性时,显示为简单分页 | `boolean` | - | ✅ |
| `[nzSize]` | 当为`'small'` 时,是小尺寸分页 | `'small' \| 'default'` | `'default'` | ✅ |
| `[nzResponsive]` | 当 `nzSize` 未指定时,根据屏幕宽度自动调整尺寸 | `boolean` | `false` | - |
| `[nzPageSizeOptions]` | 指定每页可以显示多少条 | `number[]` | `[10, 20, 30, 40]` | ✅ |
| `[nzItemRender]` | 用于自定义页码的结构 | `TemplateRef<{ $implicit: 'page' \| 'prev' \| 'next'\| 'prev_5'\| 'next_5', page: number }>` | - | - |
| `[nzShowTotal]` | 用于显示数据总量和当前数据范围,具体使用方式见代码演示部分 | `TemplateRef<{ $implicit: number, range: [ number, number ] }>` | - | - |
| `[nzHideOnSinglePage]` | 只有一页时是否隐藏分页器 | `boolean` | `false` | - |
| `[nzAlign]` | 对齐方式 | `NzPaginationAlign` | `start` | - | 20.4.0 |
| `(nzPageIndexChange)` | 页码改变的回调 | `EventEmitter` | - | - |
| `(nzPageSizeChange)` | 每页条数改变的回调 | `EventEmitter` | - | - |
---
---
category: Components
subtitle: 列表
type: 数据展示
title: List
cols: 1
cover: 'https://gw.alipayobjects.com/zos/alicdn/5FrZKStG_/List.svg'
description: 最基础的列表展示,可承载文字、列表、图片、段落。
---
## 何时使用
最基础的列表展示,可承载文字、列表、图片、段落,常用于后台数据展示页面。
## API
### nz-list
| 参数 | 说明 | 类型 | 默认值 |
| ---------------- | -------------------------------------------------------------------- | --------------------------------- | -------------- |
| `[nzBordered]` | 是否展示边框 | `boolean` | `false` |
| `[nzFooter]` | 列表底部 | `string \| TemplateRef` | - |
| `[nzHeader]` | 列表头部 | `string \| TemplateRef` | - |
| `[nzItemLayout]` | 设置 `nz-list-item` 布局, 设置成 `vertical` 则竖直样式显示, 默认横排 | `'vertical' \| 'horizontal'` | `'horizontal'` |
| `[nzLoading]` | 当卡片内容还在加载中时,可以用 `loading` 展示一个占位 | `boolean` | `false` |
| `[nzSize]` | list 的尺寸 | `'large' \| 'small' \| 'default'` | `'default'` |
| `[nzSplit]` | 是否展示分割线 | `boolean` | `true` |
### nz-list-empty
列表空内容组件
| 参数 | 说明 | 类型 | 默认值 |
| -------------- | -------------- | ----------------------------- | ------ |
| `[nzNoResult]` | 空内容显示内容 | `string \| TemplateRef` | - |
### nz-list[nzGrid]
使用栅格布局
### nz-list-header
列表头部位置组件
### nz-list-footer
列表脚部位置组件
### nz-list-pagination
列表分页位置组件
### nz-list-load-more
列表加载更多位置组件
---
### nz-list-item
| 参数 | 说明 | 类型 | 默认值 |
| ------------ | ---------------------- | --------- | ------- |
| `[nzNoFlex]` | 是否非 `flex` 布局渲染 | `boolean` | `false` |
### ul[nz-list-item-actions]
列表项操作项容器组件
### nz-list-item-action
列表项操作项组件
### nz-list-item-extra
---
列表项扩展内容位置组件
### nz-list-item-meta
| 参数 | 说明 | 类型 | 默认值 |
| ----------------- | ------------------ | ----------------------------- | ------ |
| `[nzAvatar]` | 列表元素的图标 | `string \| TemplateRef` | - |
| `[nzDescription]` | 列表元素的描述内容 | `string \| TemplateRef` | - |
| `[nzTitle]` | 列表元素的标题 | `string \| TemplateRef` | - |
### nz-list-item-meta-title
列表项元信息标题部分组件
### nz-list-item-meta-description
列表项元信息描述部分组件
### nz-list-item-meta-avatar
列表项元信息头像部分组件
| 参数 | 说明 | 类型 | 默认值 |
| --------- | -------------------- | -------- | ------ |
| `[nzSrc]` | 图片类头像的资源地址 | `string` | - |
---
---
category: Components
type: 反馈
title: Spin
subtitle: 加载中
cover: 'https://gw.alipayobjects.com/zos/alicdn/LBcJqCPRv/Spin.svg'
description: 用于页面和区块的加载中状态。
---
## 何时使用
页面局部处于等待异步数据或正在渲染过程时,合适的加载动效会有效缓解用户的焦虑。
## API
### nz-spin
| 参数 | 说明 | 类型 | 默认值 | 全局配置 |
| --------------- | ---------------------------------------------- | --------------------------------- | ----------- | -------- |
| `[nzDelay]` | 延迟显示加载效果的时间(防止闪烁),单位:毫秒 | `number` | - |
| `[nzIndicator]` | 加载指示符 | `TemplateRef` | - | ✅ |
| `[nzSize]` | 组件大小 | `'large' \| 'small' \| 'default'` | `'default'` |
| `[nzSpinning]` | 是否旋转 | `boolean` | `true` |
| `[nzSimple]` | 是否包裹元素 | `boolean` | `false` |
| `[nzTip]` | 当作为包裹元素时,可以自定义描述文案 | `string` | - |
---
---
category: Components
subtitle: 单选框
type: 数据录入
title: Radio
cover: 'https://gw.alipayobjects.com/zos/alicdn/8cYb5seNB/Radio.svg'
description: 用于在多个备选项中选中单个状态。
---
## 何时使用
- 用于在多个备选项中选中单个状态。
- 和 Select 的区别是,Radio 所有选项默认可见,方便用户在比较中选择,因此选项不宜过多。
## API
### [nz-radio] | [nz-radio-button]
| 参数 | 说明 | 类型 | 默认值 |
| ----------------- | ---------------------------------------- | ----------------------- | ------- |
| `[nzAutoFocus]` | 自动获取焦点 | `boolean` | `false` |
| `[nzDisabled]` | 设定 disable 状态 | `boolean` | `false` |
| `[ngModel]` | 指定当前是否选中,可双向绑定 | `boolean` | `false` |
| `[nzValue]` | 设置 value,与 `nz-radio-group` 配合使用 | `any` | - |
| `(ngModelChange)` | 选中变化时回调 | `EventEmitter` | - |
### nz-radio-group
单选框组合,用于包裹一组 `nz-radio`。
| 参数 | 说明 | 类型 | 默认值 |
| ----------------- | ------------------------------------------------------------ | --------------------------------- | ----------- |
| `[ngModel]` | 指定选中的 `nz-radio` 的 value 值 | `any` | - |
| `[nzName]` | `nz-radio-group` 下所有 `input[type="radio"]` 的 `name` 属性 | `string` | - |
| `[nzDisabled]` | 设定所有 `nz-radio` disable 状态 | `boolean` | `false` |
| `[nzSize]` | 大小,只对按钮样式生效 | `'large' \| 'small' \| 'default'` | `'default'` |
| `(ngModelChange)` | 选中变化时回调 | `EventEmitter` | - |
| `[nzButtonStyle]` | RadioButton 的风格样式,目前有描边和填色两种风格 | `'outline' \| 'solid'` | `'outline'` |
## 方法
### [nz-radio]
可以通过 `ViewChild` 等其他方式获取 `NzRadioComponent` 使用以下方法
| 名称 | 描述 |
| --------- | -------- |
| `blur()` | 移除焦点 |
| `focus()` | 获取焦点 |
---
---
category: Components
type: 数据展示
title: Card
subtitle: 卡片
cols: 1
cover: 'https://gw.alipayobjects.com/zos/alicdn/keNB-R8Y9/Card.svg'
description: 通用卡片容器。
---
## 何时使用
最基础的卡片容器,可承载文字、列表、图片、段落,常用于后台概览页面。
## API
```html
卡片内容
```
### nz-card
| 参数 | 说明 | 类型 | 默认值 | 支持全局配置 |
| --------------- | --------------------------------------------------- | ----------------------------- | ----------- | ------------ |
| `[nzActions]` | 卡片操作组,位置在卡片底部 | `Array>` | - |
| `[nzBodyStyle]` | 内容区域自定义样式 | `{ [key: string]: string }` | - |
| `[nzBordered]` | 是否有边框 | `boolean` | `true` | ✅ |
| `[nzCover]` | 卡片封面 | `TemplateRef` | - |
| `[nzExtra]` | 卡片右上角的操作区域 | `string \| TemplateRef` | - |
| `[nzHoverable]` | 鼠标移过时可浮起 | `boolean` | `false` | ✅ |
| `[nzLoading]` | 当卡片内容还在加载中时,可以用 loading 展示一个占位 | `boolean` | `false` |
| `[nzTitle]` | 卡片标题 | `string \| TemplateRef` | - |
| `[nzType]` | 卡片类型,可设置为 `inner` 或 不设置 | `'inner'` | - |
| `[nzSize]` | 卡片的尺寸 | `'default' \| 'small'` | `'default'` | ✅ |
### nz-card-meta
| 参数 | 说明 | 类型 | 默认值 |
| ----------------- | --------- | ----------------------------- | ------ |
| `[nzAvatar]` | 头像/图标 | `TemplateRef` | - |
| `[nzDescription]` | 描述内容 | `string \| TemplateRef` | - |
| `[nzTitle]` | 标题内容 | `string \| TemplateRef` | - |
### [nz-card-grid]
| 参数 | 说明 | 类型 | 默认值 | 支持全局配置 |
| --------------- | ---------------- | --------- | ------ | ------------ |
| `[nzHoverable]` | 鼠标移过时可浮起 | `boolean` | `true` | - |
分隔卡片内容区域
### nz-card-tab
分隔页签标题区域
---
---
category: Components
subtitle: 哈希码
type: 特色组件
title: HashCode
tag: 17.0.0
cover: 'https://img.alicdn.com/imgextra/i3/O1CN01jn3OGS1qq7Xkq6O6b_!!6000000005546-2-tps-1074-374.png'
description: 展示区块链数据的哈希值。
---
## 何时使用
哈希码组件是以 64 位设计的样式,如果给出的数据不足或者高于 64 位,可能会带来一些展示上的差异。
## API
### nz-hash-code
| 参数 | 说明 | 类型 | 默认值 |
| ------------ | ---------------- | ------------------------------------------- | ------------ |
| `[nzValue]` | 哈希码的值 | `string` | - |
| `[nzTitle]` | 左上角的描述内容 | `string` | `'HashCode'` |
| `[nzLogo]` | 右上角的展示 | `TemplateRef \| string` | - |
| `[nzMode]` | 展示模式 | `'single' \| 'double' \| 'strip' \| 'rect'` | `'double'` |
| `[nzType]` | 样式 | `'default' \| 'primary'` | `'primary'` |
| `(nzOnCopy)` | 点击"复制"的回调 | `EventEmitter` | - |
---
---
category: Components
subtitle: 固钉
type: 其他
title: Affix
cover: 'https://gw.alipayobjects.com/zos/alicdn/tX6-md4H6/Affix.svg'
description: 将页面元素钉在可视范围。
---
## 何时使用
当内容区域比较长,需要滚动页面时,这部分内容对应的操作或者导航需要在滚动范围内始终展现。常用于侧边菜单和按钮组合。
页面可视范围过小时,慎用此功能以免遮挡页面内容。
## API
### nz-affix
| 成员 | 说明 | 类型 | 默认值 | 全局配置 |
| ------------------ | ------------------------------------------------------------------------- | ----------------------- | -------- | -------- |
| `[nzOffsetBottom]` | 距离窗口底部达到指定偏移量后触发 | `number` | - | ✅ |
| `[nzOffsetTop]` | 距离窗口顶部达到指定偏移量后触发 | `number` | `0` | ✅ |
| `[nzTarget]` | 设置 `nz-affix` 需要监听其滚动事件的元素,值为一个返回对应 DOM 元素的函数 | `string \| HTMLElement` | `window` |
| `(nzChange)` | 固定状态改变时触发的回调函数 | `EventEmitter` | - |
**注意:**`nz-affix` 内的元素不要使用绝对定位,如需要绝对定位的效果,可以直接设置 `nz-affix` 为绝对定位:
```html
...
```
---
---
category: Components
subtitle: 图标
type: 通用
title: Icon
hasPageDemo: true
cover: 'https://gw.alipayobjects.com/zos/alicdn/rrwbSt3FQ/Icon.svg'
description: 语义化的矢量图形。
---
## 图标列表
新版图标可能略有缺失,我们将与 [Ant Design](https://ant.design/components/icon-cn/) 同步保持图标的更新。
## API
### nz-icon, [nz-icon]
| 参数 | 说明 | 类型 | 默认值 | 支持全局配置 |
| ------------------ | ------------------------------------------------------------ | ------------------------------ | ----------- | ------------ |
| `[nzType]` | 图标类型,遵循图标的命名规范 | string | - | - |
| `[nzTheme]` | 图标主题风格。可选实心、描线、双色等主题风格,适用于官方图标 | `'fill'丨'outline'丨'twotone'` | `'outline'` | ✅ |
| `[nzSpin]` | 是否有旋转动画 | `boolean` | `false` | - |
| `[nzTwotoneColor]` | 双色图标的主要颜色,默认为 Ant Design 蓝色 | `string (十六进制颜色)` | - | ✅ |
| `[nzIconfont]` | 指定来自 IconFont 的图标类型 | string | - | - |
| `[nzRotate]` | 图标旋转角度 | `number` | - | - |
### NzIconService
| 方法 | 说明 | 参数 |
| ---------------------- | ---------------------------------------------------------------------------------- | ------------------------ |
| `addIcon()` | 用于静态引入图标,可传入多个值(或者用数组解构赋值) | `IconDefinition` |
| `addIconLiteral()` | 用于静态引入用户自定义图标 | `string`, `string (SVG)` |
| `fetchFromIconfont()` | 用于从 IconFont 获取图标资源文件 | `NzIconfontOption` |
| `changeAssetsSource()` | 用于修改动态加载图标的资源前缀,使得你可以部署图标资源到你想要的任何位置,例如 CDN | `string` |
### SVG 图标
NG-ZORRO 采用 svg 图标,带来了以下优势:
- 支持多色图标。
- 在低端设备上 SVG 有更好的清晰度。
- 对于内建图标的更换可以提供更多 API,而无需样式覆盖。
你可以使用 `nz-icon` 组件,传入 `theme` 以明确图标的主题风格,例如:
```html
```
### 静态加载与动态加载
对于 Ant Design 提供的图标,我们提供了两种方式来加载图标资源文件。
**静态加载**,可以在 `app.config.ts` 中使用 `provideNzIcons` 引入你需要的图标(推荐)或者是全部的图标,例如:
```typescript
import { IconDefinition } from '@ant-design/icons-angular';
import { provideNzIcons } from 'ng-zorro-antd/icon';
// 引入你需要的图标,比如你需要 fill 主题的 AccountBook Alert 和 outline 主题的 Alert,推荐 ✔️
import { AccountBookFill, AlertFill, AlertOutline } from '@ant-design/icons-angular/icons';
const icons: IconDefinition[] = [AccountBookFill, AlertOutline, AlertFill];
// 引入全部的图标,不推荐 ❌
// import * as AllIcons from '@ant-design/icons-angular/icons';
// const antDesignIcons = AllIcons as Record;
// const icons: IconDefinition[] = Object.keys(antDesignIcons).map(key => antDesignIcons[key])
export const appConfig: ApplicationConfig = {
providers: [provideNzIcons(icons)]
};
```
本质上是调用了 `NzIconService` 的 `addIcon` 方法,引入后的文件会被打包到 `.js` 文件中。
静态引入会增加包体积,所以我们建议尽可能地使用动态加载,如果要静态加载,也仅仅加载你需要用到的图标。
> 为了加快渲染速度,NG-ZORRO 本身用到的图标是静态引入的。官网的图标是动态引入的。
**动态加载**,这是为了减少包体积而提供的方式。当 NG-ZORRO 检测用户想要渲染的图标还没有静态引入时,会发起 HTTP 请求动态引入。
你只需要配置 `angular.json` 文件:
```json
{
"assets": [
{
"glob": "**/*",
"input": "./node_modules/@ant-design/icons-angular/src/inline-svg/",
"output": "/assets/"
}
]
}
```
你可以通过 `NzIconService` 的 `changeAssetsSource()` 方法来修改图标资源的位置,这样你就可以部署这些资源到 CDN 上。你的参数会被直接添加到 `assets/` 的前面。
例如,你在 `https://mycdn.somecdn.com/icons/assets` 目录下部署了静态资源文件,则可以通过调用 `changeAssetsSource('https://mycdn.somecdn.com/icons')`,来告诉 NG-ZORRO 从这个位置动态加载图标资源。
### 在子模块中补充图标
有时候,为了避免增大 `main.js` 的体积,你可能想要在懒加载的组件中或路由的 `providers` 中使用 `provideNzIconsPatch` 来补充图标
```typescript
import { NzIconModule, provideNzIconsPatch } from 'ng-zorro-antd/icon';
// 在 xxx.component.ts 中
@Component({
imports: [NzIconModule],
providers: [provideNzIconsPatch([QuestionOutline])]
})
class ChildComponent {}
// 或 在 xxx.routes.ts 中
const routes: Routes = [
{
path: '',
providers: [provideNzIconsPatch([QuestionOutline])]
}
];
```
这样,当 QuestionOutline 图标加载之后,整个应用都能够使用它。
### 双色图标主色
对于双色图标,可以通过提供全局配置 `{ nzIcon: { nzTwotoneColor: 'xxx' } }` 或 `NzConfigService` 的对应方法修改来全局设置图标主色。
### 自定义 font 图标
我们提供了 `fetchFromIconfont` 方法,方便开发者调用在 [iconfont.cn](http://iconfont.cn/) 上自行管理的图标。
```typescript
this._iconService.fetchFromIconfont({
scriptUrl: 'https://at.alicdn.com/t/font_8d5l8fzk5b87iudi.js'
});
```
```html
```
其本质上是创建了一个使用 `