ngx-formly 5.0 版本升级指南:核心变更与适配方案

ngx-formly 5.0 版本升级指南:核心变更与适配方案

ngx-formly 📝 JSON powered / Dynamic forms for Angular ngx-formly 项目地址: https://gitcode.com/gh_mirrors/ng/ngx-formly

前言

ngx-formly 是一个强大的 Angular 动态表单库,它允许开发者通过 JSON 配置快速构建复杂的表单界面。在 5.0 版本中,ngx-formly 引入了一些重要的 API 变更和架构调整,本文将详细解析这些变更,并提供平滑升级的解决方案。

核心模块变更 (@ngx-formly/core)

1. 自定义字段类型的生命周期方法调整

在 5.0 版本中,自定义字段类型不再需要调用父类的生命周期方法(如 ngOnInitngOnChanges 等)。这是 Angular 社区推荐的做法,简化了继承逻辑。

升级前代码

export class CustomFormlyField extends FieldType {
  ngOnInit() {
    super.ngOnInit(); // 不再需要
    // 自定义逻辑
  }
}

升级后代码

export class CustomFormlyField extends FieldType {
  ngOnInit() {
    // 直接编写自定义逻辑
  }
}

2. 表单验证消息组件简化

FormlyValidationMessage 组件移除了冗余的 fieldForm 输入属性,现在只需传入 field 即可。

升级前

<formly-validation-message [field]="field" [fieldForm]="formcontrol"></formly-validation-message>

升级后

<formly-validation-message [field]="field"></formly-validation-message>

3. 类型重命名

Field 类型被重命名为更语义化的 FieldType,这更准确地反映了其用途。

变更示例

// 旧版
import { Field } from '@ngx-formly/core';

// 新版
import { FieldType } from '@ngx-formly/core';

4. 表单字段组件输入简化

formly-field 组件现在只需要 field 输入属性,其他属性(modeloptionsform)会自动从上下文中获取。

简化对比

<!-- 旧版 -->
<formly-field [form]="form" [field]="field" [options]="options" [model]="model"></formly-field>

<!-- 新版 -->
<formly-field [field]="field"></formly-field>

5. 自定义控件创建方式变更

创建自定义表单控件的方式从 createControl 静态方法迁移到了 prePopulate 钩子中,这提供了更大的灵活性。

升级方案

// 旧版方式(已废弃)
export class FormlyFieldCustomType extends FieldType {
  static createControl(model: any, field: FormlyFieldConfig): AbstractControl {
    return new FormControl(...);
  }
}

// 新版推荐方式
export class FormlyFieldCustomType extends FieldType {
  prePopulate(field: FormlyFieldConfig) {
    if (field.formControl) {
      return;
    }
    field.formControl = new FormControl(...);
  }
}

6. 生命周期钩子重构

lifecycle 选项被重命名为 hooks,并且回调函数的参数结构发生了变化,现在接收完整的 field 对象。

变更示例

// 旧版
fields = [{
  key: 'email',
  lifecycle: {
    onInit: (form, field, model, options) => { /*...*/ }
  }
}]

// 新版
fields = [{
  key: 'email',
  hooks: {
    onInit: (field) => {
      const { form, model, options } = field;
      /*...*/
    }
  }
}]

7. 扩展机制变更

manipulators 配置被更通用的 extension 机制取代,提供了更清晰的扩展方式。

配置变更

// 旧版
FormlyModule.forRoot({
  manipulators: [{ method: 'run', class: TemplateAddons }],
})

// 新版
FormlyModule.forRoot({
  extensions: [{ name: 'addons', extension: addonsExtension }],
})

Material 适配器变更 (@ngx-formly/material)

1. 文本区域模块独立

textarea 类型从 FormlyMatInputModule 中分离出来,现在需要单独导入 FormlyMatTextAreaModule

2. 多选框模块独立

类似地,multicheckbox 类型现在有自己的模块 FormlyMatMultiCheckboxModule,不再包含在 FormlyMatCheckboxModule 中。

Bootstrap 适配器变更 (@ngx-formly/bootstrap)

  1. 移除了几个已废弃的包装器('label', 'fieldset', 'description', 'validation-message'),统一使用 form-field 包装器
  2. 放弃了对 Bootstrap 3 的支持,用户需要迁移到 Bootstrap 4+

Ionic 适配器变更 (@ngx-formly/ionic)

现在要求使用 Ionic 4+ 版本,与 Ionic 框架的最新版本保持同步。

升级建议

  1. 逐步进行升级,先升级到 4.7 版本(特别是 Bootstrap 用户)
  2. 使用 TypeScript 的编译时检查来捕获所有类型变更
  3. 重点关注自定义字段类型的修改
  4. 对于复杂项目,考虑分模块逐步升级

通过遵循这些指南,您可以顺利将项目迁移到 ngx-formly 5.0,享受更简洁的 API 和更强大的功能。

ngx-formly 📝 JSON powered / Dynamic forms for Angular ngx-formly 项目地址: https://gitcode.com/gh_mirrors/ng/ngx-formly

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武允倩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值