Skip to content

Model

The FormGenerator component within the Nuxt-Form module leverages models to generate form inputs. You can supply the model to the FormGenerator via the model props.

Model

By default, the model follows the structure specified by the FormInput.Container inteface structure. interface. You can create a model by forming an array of FormInput.Container items. The FormGenerator will then use this to generate your form.

TS
interface Container {
  name: string,
  label?: string,
  rules?: Array<string | { [key: string]: string[] }>,
  options?: { [key: string | number]: string },
  required?: boolean,
  checked?: boolean,
  value?: string,
  accept?: string,
  mask?: string,
  multiple?: boolean,
  default?: string,
  type?: string,
  placeholder?: string,
  [key: string]: any
}

ModelFormatter

There might be situations where you already have a model that does not fit the format required by the FormGenerator. For example, if you have a TypeORM Entity and you wish to utilize it. In these cases, the `FormGenerator? provides a model formatter. By adding formatting layers to the layers props, the formatter can transform your model to the format that the FormGenerator requires. Currently available layers are:

  • typeorm for formatting TypeORM entities.
  • class-validator for interpreting class-validator decorators.
  • form for interpreting NuxtFormField decorator.

A significant forthcoming feature will allow adding custom layers to this list.

Example

Consider a TypeORM model:

TS
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
import { IsNotEmpty } from 'class-validator';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'varchar' })
  @IsNotEmpty()
  @NuxtFormField({ label: 'Firstname' })
  firstname: string;

  @Column({ type: 'varchar' })
  @IsNotEmpty()
  @NuxtFormField({ label: 'Lastname' })
  lastname: string;
}

You can pass this model directly to the FormGenerator in a Vue file:

VUE
<script lang="ts" setup>
import User from 'user.model'
</script>
<template>
  <FormGenerator :model="User" :layers="['typeorm', 'class-validator', 'form']" />
</template>

NuxtFormField

The NuxtFormField decorator can be used in any class. Coupled with its formatter, it fills in any missing parameters needed for form generation, such as labels.

Example

TS
class Foo {
  @NuxtFormField({ label: 'Lastname' })
  lastname: string
}