[Angular] ngx-formly (AKA angular-formly for Angular latest version)
In our dynamic forms lessons we obviously didn’t account for all the various edge cases you might come across. Therefore if you need a more complex setup you might want to take a look at ngx-formly
. Formly has been a very popular library even in AngularJS 1.x for rendering dynamic forms.
Ngx-formly is the Angular (2+) counterpart for doing this job. In this lesson we’ll quickly give it a look at how to transform our custom dynamic form rendering to use ngx-formly
. For more use cases definitely check out the official ngx-formly
repository on GitHub.
Add module to the root:
import {NgModule} from '@angular/core'; import {ReactiveFormsModule} from '@angular/forms'; import {FormlyModule} from '@ngx-formly/core'; import {FormlyBootstrapModule} from '@ngx-formly/bootstrap'; // for material2 import `FormlyMaterialModule`: // import {FormlyMaterialModule} from '@ngx-formly/material'; @NgModule({ imports: [ ..., ReactiveFormsModule, FormlyModule.forRoot(), FormlyBootstrapModule, // for material2 use: // FormlyMaterialModule ], }) export class AppModule {}
One difference from angular-formly with ngx-formly is the validation:
import { Validators } from '@angular/forms'; import { Component } from '@angular/core'; import { FormlyFieldConfig } from '@ngx-formly/core'; @Component({ selector: 'app-root', template: ` <h1>Dynamic reactive forms in Angular</h1> <app-dynamic-form [data]="person" [formDataObj]="personFields"></app-dynamic-form> ` }) export class AppComponent { person = { firstname: 'Juri', age: 32, gender: 'M' }; personFields = <FormlyFieldConfig>[ { key: 'firstname', type: 'input', templateOptions: { label: 'Firstname' }, validators: { validation: Validators.required }, validation: { messages: { required: 'You need to provide a value' } } }, { key: 'age', type: 'input', templateOptions: { label: 'Age', type: 'number' }, validators: { validation: Validators.min(18) }, validation: { messages: { min: 'You need to specify a value greater or equal to 18' } } }, { key: 'gender', type: 'radio', templateOptions: { label: 'Gender', options: [{ value: 'Male', key: 'M' }, { value: 'Female', key: 'F' }] } } ]; }
More infromation to check out.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2017-04-08 [SCSS] Organize SCSS into Multiple Files with Partials
2017-04-08 [CSS Flex] Justify-content
2017-04-08 [CSS Flex] Flex direction
2016-04-08 [Git] Automatically running tests before commits with ghooks