@cleo/ngx-json-schema-form

中文文档
7.0.6发布于 2026/07/21TypeScriptES Module近 30 天下载 5482

This project is a JSON Schema 7 form builder for Angular 20+. This project contains the front end code that consumes JSON Schema and generates a user friendly form that can be used in a web interface.

原始使用文档

JSON Schema Form

This project is a JSON Schema 7 form builder for Angular 20+. This project contains the front end code that consumes JSON Schema and generates a user friendly form that can be used in a web interface.

This code needs to work in tandem with the back end JSON Schema Form Validation package.

Getting Started

(1) Install the library in your project

npm install @cleo/ngx-json-schema-form

(2) Import JSFComponent directly into your standalone component.

import { Component, ViewChild, signal } from '@angular/core';

@Component({
  selector: 'example',
  standalone: true,
  imports: [JSFComponent],
  templateUrl: 'example.component.html',
  styleUrls: ['./example.component.scss']
})
export class ExampleComponent { }

(3) Configure your Angular component to use the JSON Schema Form. Reference the example below as well as a detailed list below of the necessary steps.

  • Create a JSFConfig object to control the commonly used configuration items:
    • If sections are collapsible
    • If there are dividers between sections
    • If outer sections are expanded by default
  • Create a JSFSchemaData object by passing your JSON Schema 7 object and a corresponding values object. The component will internally transform these into its data model.
  • Create a Submit button in your component. Listen to the disableSubmit event emitted from the JSON Schema Form and disable your submit button.
  • Create a ViewChild property to reference your JSFComponent. Use it to retrieve submitted form values by calling this.schemaFormComponent.getFormValues().
  • [Optional] Listen to the formHeightChange event emitted from the JSON Schema Form.
  • [Optional] Listen to the buttonEvent event to handle button clicks defined in the schema. The event emits a JSFEventButton with the button's key and targets.
  • [Optional] Listen to the templateEvent event to handle events from custom templates. The event emits a JSFTemplateEvent with the template's key and target paths.
  • [Optional] Listen to the tabChange event to be notified when the active tab changes. The event emits the tab's property key from the JSON schema.
  • [Optional] Listen to the formReady event to be notified once the form's internal structure (FormGroup, controls, and data items) has been built from the current schemaData. This is the reliable way to know the form is ready to be read (e.g. via getFormValues() or formGroup.get(...)), and it emits even when the form produces no values (e.g. an all-hidden or template-only schema). It emits again whenever schemaData changes and the form is rebuilt.
import { Component, ViewChild, signal } from '@angular/core';
import { JSFComponent, JSFConfig, JSFSchemaData, JSFEventButton, JSFTemplateEvent } from '@cleo/ngx-json-schema-form';

@Component({
  selector: 'example',
  standalone: true,
  imports: [JSFComponent],
  templateUrl: 'example.component.html',
  styleUrls: ['./example.component.scss']
})
export class ExampleComponent {
  @ViewChild(JSFComponent, { static: false }) schemaFormComponent!: JSFComponent;
  readonly config: JSFConfig = {
    enableCollapsibleSections: false,
    showSectionDivider: true,
    expandOuterSectionsByDefault: true,
  };
  readonly isSubmitDisabled = signal<boolean>(true);
  readonly schemaData = signal<JSFSchemaData>(new JSFSchemaData(schema, values));

  // this event allows you to enable/disable the submit button in the parent container
  onDisableSubmit(disableSubmit: boolean): void {
    this.isSubmitDisabled.set(disableSubmit);
  }

  // this event allows you to modify parent container height to match the height of the form
  onFormHeightChange(formHeight: number): void { }

  // this event is emitted when a schema-defined button is clicked
  onButtonEvent(event: JSFEventButton): void { }

  // this event is emitted when a custom template triggers an event
  onTemplateEvent(event: JSFTemplateEvent): void { }

  // this event emits the key of the active tab whenever it changes
  onTabChange(tabKey: string): void { }

  // this event is emitted once the form structure has been built from the schemaData,
  // and again whenever a new schema is provided and the form is rebuilt
  onFormReady(): void { }

  getJSFFormValues(): void {
    const jsonData = this.schemaFormComponent.getFormValues();
  }
}

(4) Import the JSFComponent into your template. See example below.

  <jsf-component
   [schemaData]="schemaData()"
   [config]="config"
   (disableSubmit)="onDisableSubmit($event)"
   (formHeightChange)="onFormHeightChange($event)"
   (buttonEvent)="onButtonEvent($event)"
   (templateEvent)="onTemplateEvent($event)"
   (tabChange)="onTabChange($event)"
   (formReady)="onFormReady()">
  </jsf-component>

Note: be sure to only pass in a valid JSON schema object. If you don't already have your own schemas, you can use a preconfigured schema projects/jsf-launcher/src/app/schemaV2.json to test with.

版本与发布记录

@cleo/ngx-json-schema-form 共发布 45 个版本,首次发布于 2020/07/28;过去 12 个月发布了 10 个版本。

版本发布日期距今
7.0.6latest2026/07/213 个月前
7.0.52026/06/134 个月前
7.0.42026/05/215 个月前
7.0.32026/05/135 个月前
7.0.22026/05/125 个月前
7.0.12026/04/306 个月前

关于 @cleo/ngx-json-schema-form 的常见问题

@cleo/ngx-json-schema-form 是什么?

This project is a JSON Schema 7 form builder for Angular 20+. This project contains the front end code that consumes JSON Schema and generates a user friendly form that can be used in a web interface.

如何安装 @cleo/ngx-json-schema-form?

在项目目录运行 npm install @cleo/ngx-json-schema-form,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@angular/common(^20.0.0)、@angular/core(^20.0.0)、@angular/forms(^20.0.0)、bootstrap-sass(^3.4.3)、rxjs(^7.8.0)、ag-grid-community(>=28.0.0)、ag-grid-angular(>=28.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@cleo/ngx-json-schema-form 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cleo/ngx-json-schema-form 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cleo/ngx-json-schema-form 可以商用吗?

@cleo/ngx-json-schema-form 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@cleo/ngx-json-schema-form 的下载量有多少?

根据 npm 官方下载统计,@cleo/ngx-json-schema-form 在 2026/10/10 – 2026/11/08 这 30 天内被下载 5,482 次,日均约 183 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cleo/ngx-json-schema-form 还在维护吗?

最新版本 7.0.6 发布于 2026/07/21(3 个月前);至今共发布 45 个版本,其中过去 12 个月发布了 10 个;首次发布于 2020/07/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。