2

Tengo un formulario en Angular 6 del cual obtengo los datos con una estructura JSON como la siguiente:

solicitud = {
    completada: false,
    elementos: 8,
    nombre: 'pepito',
    telefono: '3332224444',
    valor: 50000
}

Necesito crear un objeto con la siguiente estructura:

solicitud_general = {
    completada: false,
    elementos: 8,
    datos_personales: {
        nombre: 'pepito',
        telefono: '3332224444'
    },
    valor: 50000
}

Esto lo necesito para enviarlo por medio de un servicio de Angular que consume un servicio web de una API rest.

El formulario real es mucho más grande.

¿Hay alguna forma de pasar los valores de un objeto a otro? teniendo en cuenta que el objeto anidado va a contener parte de la información del formulario.

Fragmento de código HTML:

<div class="column">
      <div class="control">
        <label class="label is-small"
               [ngClass]="{'is-required': Tipos_Identificacion.value != '2' || Tipos_Identificacion.value == ''}">Nombres</label>
        <input type="text" placeholder="Ingrese sus nombres" class="input is-small"
               #inputNombres (input)="inputNombres.value=$event.target.value.toUpperCase()"
               formControlName="Nombres" maxlength="60" tabindex="3"
               [ngClass]="{ 'is-danger': Nombres.invalid && (Nombres.dirty || Nombres.touched) }">
        <div class="control-errors"
             *ngIf="Nombres.invalid && (Nombres.dirty || Nombres.touched)">
          <p class="help is-danger" *ngIf="Nombres.errors.required">
            El nombre es obligatorio
          </p>
          <p class="help is-danger" *ngIf="Nombres.errors.pattern">
            El valor ingresado no es un nombre válido
          </p>
        </div>
      </div>
    </div>
  </div>

Fragmento de código TypeScript:

@Input() solicitantesForm: FormGroup;

get Nombres() {
    return this.solicitantesForm.get('Nombres');
}

En este momento lo estoy haciendo de forma manual:

formatearSolicitud(){

    solicitud = {
        completada: solicitudForm.completada,
        elementos: solicitudForm.elementos,
        valor: solicitudForm.valor
    }

    datos_personales = {
        nombre = solicitudForm.nombre,
        telefono = solicitudForm.telefono
    }

    solicitud['datos_personales'] = datos_personales
    return solicitud
}

¿Alguna forma de automatizar esto teniendo en cuenta que en la practica son muchos más datos?.

OscarGarcia
  • 26,999
  • 3
  • 26
  • 61
Ceragos
  • 446
  • 2
  • 19

2 Answers2

2

Si lo que necesitas es que devuelta lo siguiente:

solicitud_general = {
    completada: false,
    elementos: 8,
    datos_personales: {
        nombre: 'pepito',
        telefono: '3332224444'
    },
    valor: 50000
}

Tu código podría cambiarse por el siguiente:

formatearSolicitud()
{
    return {
        completada: solicitudForm.completada,
        elementos: solicitudForm.elementos,
        datos_personales: {
            nombre = solicitudForm.nombre,
            telefono = solicitudForm.telefono,
        },
        valor: solicitudForm.valor,
    };
}

No es necesario usar variables intermedias, basta con proporcionar al return la información anidada de manera correcta.

OscarGarcia
  • 26,999
  • 3
  • 26
  • 61
0

hola quizas te pueda servir el spread operator de js (https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Spread_operator)

var myObj = {
    paramA: 'string',
    paramb: 'string'
}
var myObjAux = {
    paramC : {
        otherParam: 'string',
        otherParamAux: string;
    }
}
var objectFussion = {...myObj,... myObjAux};

Output: {paramA: "string", paramb: "string", paramC: {…}}