Introduction to NGX-Formly for Automatic Form Generation

Author by Sonny Darji

Power of Form Models

Formly is an Angular module that transforms HTML forms to Javascript/JSON configured forms. Over the past two weeks I have been using Formly to transform HTML forms and saw the benefits of how much time is saved and how much code has been condensed through this process.

The image below shows a sample Address Form in HTML using Bootstrap. Using the NGX-Formly library we can change to this after we complete our form model.

BLog2.png

In this case Formly helped reduce the logic shown above. Let’s see how we can recreate this

blog2-1.png

Step 1:

Install @angular/forms and @ngx-formly/core packages using the command:

npm install @angular/forms @ngx-formly/core –save

Step 2:

Next, install the desired UI package using the command:

npm install @ngx-formly/<package-name> --save

Step 3:

Import the Formly module and UI template to our Angular-cli app

import {NgModule} from '@angular/core';

import {ReactiveFormsModule} from '@angular/forms';

import {FormlyModule} from '@ngx-formly/core';

import {FormlyBootstrapModule} from '@ngx-formly/bootstrap';

@NgModule({ imports: [ ...,

ReactiveFormsModule,

FormlyModule.forRoot(),

FormlyBootstrapModule, ], })

export class AppModule {} from '@ngx-formly/bootstrap';

Step 4:

Add the following logic to the desired component in Angular-cli. This uses a sample Address form as our example.

export class AppComponent {

  form = new FormGroup({});

  model = { email: 'email@gmail.com' };

  fields: FormlyFieldConfig[] = [{

      {

      key: 'address',

      wrappers: ['panel'],

      templateOptions: { label: 'Address' },

      fieldGroup: [

        {

          key: 'addressLine1',

          type: 'input',

          templateOptions: {

            required: true,

            type: 'text',

            label: 'Address Line 1'

          }

        },

        {

          key: 'addressLine2',

          type: 'input',

          templateOptions: {

            required: true,

            type: 'text',

            label: 'Address Line 2'

          }

        },

        {

          key: 'city',

          type: 'input',

          templateOptions: {

            required: true,

            type: 'text',

            label: 'City'

          }

        },

        {

          key: 'state',

          type: 'select',

          templateOptions: {

            required: true,

            options: States,

            valueProp: 'abbreviation',

            labelProp: 'name',

            label: 'State'

          }

        },

        {

          key: 'zip',

          type: 'input',

          templateOptions: {

            required: true,

            type: 'text',

            label: 'Zip'

          }

        }

      ]

    }

  }];

  submit(model) {

    console.log(model);

  }}

I hope this introduction to Formly gives you the confidence to refactor your own Angular apps using the NGX-Formly module. If you have questions or wants to know more, feel free to comment below.