AngularMaterial+Formly:ValidationinsideNestedCustomTypes
创始人
2024-10-28 07:01:41
0

在使用 Angular Material 和 Formly 进行表单开发时,有时需要对嵌套的自定义类型进行验证。以下是一个示例,展示了如何在 Formly 模型中嵌套自定义类型并在 Angular Material 中添加验证。

首先,我们需要定义一个父级自定义类型,用于嵌套子级类型:

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

export interface NestedTypeModel {
  title: string;
  content: string;
  nested: NestedType;
}

export interface NestedType {
  title: string;
  content: string;
}

export class ParentType {
  static fieldGroup: FormlyFieldConfig[] = [
    {
      key: 'title',
      type: 'input',
      templateOptions: {
        label: 'Title',
        required: true,
      },
    },
    {
      key: 'content',
      type: 'textarea',
      templateOptions: {
        label: 'Content',
        required: true,
      },
    },
    {
      key: 'nested',
      type: 'custom',
      templateOptions: {
        label: 'Nested Type',
      },
      validators: {
        nested: {expression: 'formState.valid', message: 'Nested type is invalid'},
      },
      fieldGroup: [
        {
          key: 'title',
          type: 'input',
          templateOptions: {
            label: 'Title',
            required: true,
          },
        },
        {
          key: 'content',
          type: 'textarea',
          templateOptions: {
            label: 'Content',
            required: true,
          },
        },
      ],
    },
  ];
}

注意,在父级类型的 “validators” 对象中添加了一个自定义验证器“nested”,用于验证嵌套的子级类型是否有效。

接下来,我们需要定义一个自定义类型,该类型用于嵌套在父级类型中:

import { FormGroup } from '@angular/forms';
import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';
import { NestedTypeModel } from './parent-type.model';

export class NestedTypeComponent {
  title;
  content;
  form = new FormGroup({});
  options: FormlyFormOptions = {};
  fields: FormlyFieldConfig[] = [
    {
      key: 'title',
      type: 'input',
      templateOptions: {
        label: 'Title',
        required: true,
      },
      validators: {
        validTitle: {expression: '!!model.title && model.title.length > 5', message: 'Title must be at least 5 characters'},
      },
    },
    {
      key: 'content',
      type: 'textarea',
      templateOptions: {
        label: 'Content',
        required: true,
      },
      validators: {
        validContent: {expression: '!!model.content && model.content.length > 10', message: 'Content must be at least 10 characters'},
      },
    },
  ];

  constructor() {}

  get model(): NestedTypeModel {
    return {title: this.title, content: this.content, nested: null};
  }

  get formState(): any {
    return {valid: this.form.valid};
  }
}

在该自定义类型中,我们添加了一个表单分组和一些子级字段。还添加了一些自定义验证器来验证子级类型的特定字段。

最后,我们可以将父级类型和子级类型组合在一起,并将其添加到 Formly 的配置中:

相关内容

热门资讯

研究成果!新超圣正版辅助,欢乐... 研究成果!新超圣正版辅助,欢乐达人破解器,新2025教程(有挂功能);新超圣正版辅助软件透明挂是一个...
必备攻略!微信超级3+1辅助,... 必备攻略!微信超级3+1辅助,悠悠互娱辅助,扑克教程(有挂技巧)是一款可以让一直输的玩家,快速成为一...
总算了解!九酷众游软件,仟众部... 总算了解!九酷众游软件,仟众部落辅助,软件教程(有挂方法)是一款可以让一直输的玩家,快速成为一个“必...
玩家必看科普!新星游房间链接辅... 玩家必看科普!新星游房间链接辅助,天天微友辅助神器,实用技巧(有挂规律);1、玩家必看科普!新星游房...
分享一款!枫叶辅助官网下载,新... 分享一款!枫叶辅助官网下载,新天道辅助软件,详细教程(有挂分析);是一款可以让一直输的玩家,快速成为...
我来教教你!新二号辅助下载,新... 您好,新二号辅助下载这款游戏可以开挂的,确实是有挂的,需要了解加微【485275054】很多玩家在这...
今日焦点!授权二厅辅助,新51... 今日焦点!授权二厅辅助,新518互游插件,爆料教程(证实有挂);致您一封信;亲爱授权二厅辅助玩家:《...
记者揭秘!新上游反杀辅助,新八... 记者揭秘!新上游反杀辅助,新八戒可以控制牌型,2025新版总结(讲解有挂);1、这是跨平台的新八戒可...
教程攻略!新荣耀大厅控制器,天... 教程攻略!新荣耀大厅控制器,天酷辅助器,力荐教程(有挂规律);1、全新机制【新荣耀大厅控制器软件透明...
一分钟揭秘!蜜瓜大厅辅助下载,... 一分钟揭秘!蜜瓜大厅辅助下载,天酷大厅辅助,2025新版教程(真是有挂);1、超多福利:超高返利,海...