准确来说,我不是职业前端,因为需要使用 Angular 框架完成项目,所以顺带了解到了 NG-ZORRO 这套前端框架。整个过程处于边学习边使用的状态,主要的方式也是偏向于完成设计内容而非了解其实现原理。系统前端这块儿,使用的是 Node 12.19.0 和 NG-ZORRO 9.3.0 ,开发软件 WebStorm 。
Ant Design of Angular ,也就是 ng-zorro-antd ,是遵循 Ant Design 设计规范的 Angular UI 组件库,全部代码开源并遵循 MIT 协议,任何企业、组织及个人均可免费使用。它的特定:提炼自企业级中后台产品的交互语言和视觉风格。开箱即用的高质量 Angular 组件,与 Angular 保持同步升级。使用 TypeScript 构建,提供完整的类型定义文件。支持 OnPush 模式,性能卓越等等。
当然,以上内容均是摘自官网,我觉得它好用的原因是:我不会写前端样式,而它拥有现成的组件库(坏笑 😏
一、公共配置
1. 属性基础配置
需要注意的配置点:1.全局公共属性配置,比如设定 message 组件的 top 高度,2.图标库,导入到项目中的 icons 图标,3.组件库,V8 版本弃用了 NgZorroAntdModule (V10 彻底不支持),所以需要独立引入。
已知在正常使用过程中,在自己的 component 中引入 NG-ZORRO 的组件是需要进入导入的,重复的导入行为势必会很麻烦,所以可以将其抽成一个公共的 modal ,预先性的导入,再将其引入到 AppComponent 中的 imports 里,可以尽量减少一些工作量。另外,对于一些提供了公共配置的组件,通过注入令牌 NZ_CONFIG 提供一个 NzConfig 接口对象,将全局配置项注入到 NzConfigService 之中,在减少工作量的同时还统一项目中的各个显示效果。
PS:全局配置优先级低于独立为组件的某个实例单独设置的值
icons-provider.module.ts
import { NgModule } from '@angular/core'; |
ng-zorro-antd.module.ts
// 已经忽略 import 部分 |
2. 样式覆盖配置
样式覆盖可以分成两种:全局或者各个子组件中的。全局样式覆盖需要先找到默认的样式内容,地址如下:default.less 。首先我们在 src 目录下建立一个单独的 theme.less 文件,在 angular.json 文件的 styles 列表加入该文件,拷贝默认样式文件内容,按需修啊即可(比如修改公共颜色)
"styles": [ |
组件中的独立样式修改就更简单了,找到对应的 class 名称,通过 ::ng-deep 覆盖它!另外留意一下样式污染的可能,建议通过嵌套结构减少样式修改的范围。
::ng-deep .ant-input-number { |
基础的配置大概也就以上两个部分的,其它的就是各类组件的使用了。
二、表单组件
表单的用途就太广泛了,注册、登录、查询、信息提交等等都需要到,本文中的所有关于表单的内容均已 响应式表单 展开,与之对立的 模板驱动表单 不做学习。
1. 基础表单设定
FormGroup ,我们通过使用 FormBuilder 对象提供的 group() 方法,来创建 FormGroup 和 FormControl 对象,以一个简单的申请为例也就是这个样子:
validatePassWdForm!: FormGroup; |
可以理解为:字段名称: [初始值,[验证器1,验证器2,...], [异步验证器1,异步验证器2,...]]
初始值可以为空,也可以赋值,验证器这边可以使用一些默认自带的,就比如 Validators.required 必填校验,也可以自定义验证规则,此外还支持异步验证,接收与后端数据交互后的验证效果,比如用户名唯一性校验。而对应到页面上,字段名称与 formControlName 对应,按照上面例子所对应的表单应该是:
响应式表单
|
2. 表单值的赋值
除了在初始化时通过 FormBuilder 构建外,还可以独立的进入 表单赋值 ,批量设置的可以使用 patchValue() 方法,单独设置可以使用 setValue() 方法。
this.validateForm.patchValue({ |
自然而然的,重设验证器,重置表单也不在话下:
- 设置验证器:
this.validateForm.get(name).setValidators(newValidator); - 全局表单只读:
this.validateForm.disable(); // 启用 enable(); - 单独字段只读:
this.validateForm.get(name).disable();
