es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valor JSON en FormlyFieldConfig de formulario Formly

Estoy intentando agregar un archivo JSON formateado para ajustarse al archivo formlyconfig, pero no puedo hacerlo.

Aquí está mi HTML

<div class="row">
    <div class="col-md-4 mb-4">
        <form [formgroup]="form" (ngsubmit)="onSubmit()">
            <formly-form [form]="form" [model]="model" [fields]="fields">
            </formly-form>
        </form>
    </div>
</div>

Aquí está mi archivo TS

import { Component, OnInit } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { FormlyFieldConfig } from '@ngx-formly/core';
import { CheckListClient, CheckListDTO } from '../../web-api-client';

@Component({
  selector: 'app-service-form-formly',
  templateUrl: './service-form-formly.component.html',
  styleUrls: ['./service-form-formly.component.css']
})
export class ServiceFormFormlyComponent implements OnInit {
  checklistDtos: CheckListDTO[];
  isEditable: boolean = true;

  constructor(private clientChecklist: CheckListClient, private router: Router, private route: ActivatedRoute) { }

  ngOnInit(): void {
    this.filterChecklist();
  }

  filterChecklist() {
    this.clientChecklist.getAllCheckList().subscribe(result => {
      this.checklistDtos = result;
    });
  }

  form = new FormGroup({});
  model = {};
  fields: FormlyFieldConfig[] = [

  ];

  onSubmit() {
    if (this.form.valid) {
      alert(JSON.stringify(this.model, null, 2));
    }
  }
}

El valor del JSON está dentro de this.checklistDtos = result;

Por favor, ayúdame con esto.

Tags:  

Answer

  1. Avatar for davy.ai

    Para agregar un archivo JSON al archivo de configuración formlyconfig en el código proporcionado, la propiedad fields debe llenarse con los objetos FormlyFieldConfig apropiados basados en los datos del archivo JSON. Aquí hay un ejemplo de fragmento de código que asume que el archivo JSON tiene una propiedad ‘fields’ que contiene una matriz de objetos de campo:

    import { Component, OnInit } from '@angular/core';
    import { FormGroup } from '@angular/forms';
    import { ActivatedRoute, Router } from '@angular/router';
    import { FormlyFieldConfig } from '@ngx-formly/core';
    import { CheckListClient, CheckListDTO } from '../../web-api-client';
    
    @Component({
      selector: 'app-service-form-formly',
      templateUrl: './service-form-formly.component.html',
      styleUrls: ['./service-form-formly.component.css']
    })
    export class ServiceFormFormlyComponent implements OnInit {
      checklistDtos: CheckListDTO[];
      isEditable: boolean = true;
    
      constructor(private clientChecklist: CheckListClient, private router: Router, private route: ActivatedRoute) { }
    
      ngOnInit(): void {
        this.filterChecklist();
      }
    
      filterChecklist() {
        this.clientChecklist.getAllCheckList().subscribe(result => {
          this.checklistDtos = result;
    
          // Rellenar el array de campos basado en los datos del archivo JSON
          const fieldsFromJson = this.checklistDtos.map(dto => {
            const field: FormlyFieldConfig = {
              key: dto.fieldName,
              type: dto.fieldType,
              templateOptions: {
                label: dto.fieldLabel,
                options: dto.fieldOptions,
                required: dto.fieldIsRequired
              }
            };
            return field;
          });
    
          // Actualizar la propiedad fields con el nuevo array de campos
          this.fields = [...fieldsFromJson];
        });
      }
    
      form = new FormGroup({});
      model = {};
      fields: FormlyFieldConfig[] = [];
    
      onSubmit() {
        if (this.form.valid) {
          alert(JSON.stringify(this.model, null, 2));
        }
      }
    }
    

    Cabe destacar que este código asume que la clase CheckListDTO tiene las propiedades apropiadas para cada objeto de campo, como ‘fieldName’, ‘fieldType’, ‘fieldLabel’, ‘fieldOptions’ y ‘fieldIsRequired’. El código también asume que el tipo de campo es uno de los tipos incorporados de FormlyFieldConfig, como ‘input’, ‘select’ o ‘checkbox’.

    Con este código, el componente FormlyForm debería renderizar un formulario basado en los campos del archivo JSON, y el método onSubmit debería mostrar el modelo del formulario en la consola cuando el formulario se envía.

Comments are closed.