@jsonforms/angular
Version:
Angular module of JSON Forms
153 lines (124 loc) • 5.12 kB
Markdown
_Complex forms in the blink of an eye_
JSON Forms eliminates the tedious task of writing fully-featured forms by hand by leveraging the capabilities of JSON, JSON Schema and Javascript.
This is the JSON Forms Angular package which provides the necessary bindings for Angular. It uses [JSON Forms Core](https://github.com/eclipsesource/jsonforms/blob/master/packages/core).
You can combine the Angular package with any Angular-based renderer set you want, for example the [Material Renderers](https://github.com/eclipsesource/jsonforms/blob/master/packages/angular-material).
See the official [documentation](https://jsonforms.io/docs/integrations/angular) and the JSON Forms Angular [seed repository](https://github.com/eclipsesource/jsonforms-angular-seed) for examples on how to integrate JSON Forms with your application.
Check <https://www.npmjs.com/search?q=%40jsonforms> for all published JSON Forms packages.
Use the `JsonForms` component to render a form for your data.
Mandatory props:
- `data: any` - the data to show
- `renderers: JsonFormsRendererRegistryEntry[]` - the Angular renderer set to use
Optional props:
- `schema: JsonSchema` - the data schema for the given data. Will be generated when not given.
- `uischema: UISchemaElement` - the UI schema for the given data schema. Will be generated when not given.
- `config: any` - form-wide options. May contain default ui schema options.
- `readonly: boolean` - whether all controls shall be readonly.
- `uischemas: JsonFormsUiSchemaEntry[]` - registry for dynamic ui schema dispatching
- `validationMode: 'ValidateAndShow' | 'ValidateAndHide' | 'NoValidation'` - the validation mode for the form
- `ajv: AJV` - custom Ajv instance for the form
- `middleware: Middleware` - can be used to hook into the form-wide data management.
- `i18n: JsonFormsI18nState` - can be used to internationalize the rendered form.
- `dataChange` - event emitter which is called on each data change, containing the updated data and the validation result.
- `errors` - event emitter which is called with all validations errors.
Example component file `app.component.ts`:
```ts
import { Component } from '@angular/core';
import { angularMaterialRenderers } from '@jsonforms/angular-material';
@Component({
selector: 'app-root',
template: `<jsonforms
[]="data"
[]="schema"
[]="uischema"
[]="renderers"
></jsonforms>`,
})
export class AppComponent {
renderers = angularMaterialRenderers;
uischema = {
type: 'VerticalLayout',
elements: [
{
type: 'Control',
label: false,
scope: '#/properties/done',
},
{
type: 'Control',
scope: '#/properties/name',
},
{
type: 'HorizontalLayout',
elements: [
{
type: 'Control',
scope: '#/properties/due_date',
},
{
type: 'Control',
scope: '#/properties/recurrence',
},
],
},
],
};
schema = {
type: 'object',
properties: {
name: {
type: 'string',
minLength: 1,
},
done: {
type: 'boolean',
},
due_date: {
type: 'string',
format: 'date',
},
recurrence: {
type: 'string',
enum: ['Never', 'Daily', 'Weekly', 'Monthly'],
},
},
required: ['name', 'due_date'],
};
data = {};
}
```
Example module file:
```ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { JsonFormsModule } from '@jsonforms/angular';
import { JsonFormsAngularMaterialModule } from '@jsonforms/angular-material';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
BrowserAnimationsModule,
JsonFormsModule,
JsonFormsAngularMaterialModule,
],
schemas: [],
bootstrap: [AppComponent],
})
export class AppModule {}
```
The JSON Forms project is licensed under the MIT License. See the [LICENSE file](https://github.com/eclipsesource/jsonforms/blob/master/LICENSE) for more information.
Our current roadmap is available [here](https://github.com/eclipsesource/jsonforms/blob/master/ROADMAP.md).
JSON Forms is developed by [EclipseSource](https://eclipsesource.com).
If you encounter any problems feel free to [open an issue](https://github.com/eclipsesource/jsonforms/issues/new/choose) on the repo.
For questions and discussions please use the [JSON Forms board](https://jsonforms.discourse.group).
You can also reach us via [email](mailto:jsonforms@eclipsesource.com?subject=JSON%20Forms).
In addition, EclipseSource also offers [professional support](https://jsonforms.io/support) for JSON Forms.
See our [migration guide](https://github.com/eclipsesource/jsonforms/blob/master/MIGRATION.md) when updating JSON Forms.