array 数组

创建对象数组,只对 schema.type="array" 时有效。

关于布局

数组的布局分为数组本身以及数组元素布局,arraySpan 决定每个数组元素占栅格数值。

Schema 内嵌 UI 风格:

  1. const schema = {
  2. list: {
  3. type: 'array',
  4. items: {
  5. a: { type: 'string' },
  6. b: { type: 'number', ui: { spanLabel: 10 } }
  7. },
  8. ui: { spanLabel: 5, grid: { arraySpan: 12 } }
  9. }
  10. };

注意: items 下所有属性都继承于 list.ui,最终 items.a5 个单位、items.b10 个单位。

Schema 与 UI 分开风格,假如上述 Schema 转化成 UI 写法:

  1. const ui = {
  2. $list: {
  3. $items: {
  4. $b: { spanLabel: 10 }
  5. },
  6. spanLabel: 5,
  7. grid: { arraySpan: 12 }
  8. }
  9. };

代码演示

array 数组 - 图1

基础样例

最简单的用法。

  1. import { Component } from '@angular/core';
  2. import { NzMessageService } from 'ng-zorro-antd/message';
  3. import { SFSchema, SFArrayWidgetSchema } from '@delon/form';
  4. @Component({
  5. selector: 'form-array-simple',
  6. template: `
  7. <sf [schema]="schema" (formSubmit)="submit($event)"></sf>
  8. `,
  9. })
  10. export class FormArraySimpleComponent {
  11. schema: SFSchema = {
  12. properties: {
  13. product: {
  14. type: 'array',
  15. title: '产品清单',
  16. maxItems: 4,
  17. items: {
  18. type: 'object',
  19. properties: {
  20. name: {
  21. type: 'string',
  22. title: '名称',
  23. },
  24. price: {
  25. type: 'number',
  26. title: '单价',
  27. minimum: 1,
  28. },
  29. },
  30. required: ['name', 'price'],
  31. },
  32. ui: { grid: { arraySpan: 12 } } as SFArrayWidgetSchema,
  33. },
  34. },
  35. };
  36. constructor(public msg: NzMessageService) {}
  37. submit(value: any) {
  38. this.msg.success(JSON.stringify(value));
  39. }
  40. }

API

schema 属性

参数说明类型默认值
[items]数组元素类型描述SFSchema-
[minItems]约束数组最小的元素个数number-
[maxItems]约束数组最大的元素个数number-
[uniqueItems]约束数组每个元素都不相同boolean-

ui 属性

参数说明类型默认值
[addTitle]添加按钮文本string添加
[addType]添加按钮类型,等同 nzTypestringdashed
[removable]是否包含移除按钮booleantrue
[removeTitle]移除按钮文本string移除
[$items]数组元素类型UI描述SFUISchema移除
(add)添加回调,property 表示添加后的表单属性(property: FormProperty) => void-
(remove)移除回调(index: number) => void-