Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

102
Vistas
Typescript Array Push limpiando el valor de la cadena

Estoy tratando de crear una aplicación angular para un proyecto personal y mi primer formulario web muestra un comportamiento que no entiendo. Tengo una interfaz de la siguiente manera con un servicio para actualizar una matriz de esa interfaz. La matriz se instancia en el servicio desde json existente. Mi componente usa un checkItemForm para contener los datos, luego onSubmit() actualiza un elemento y lo empuja usando el servicio. Si solo paso this.newcheckitem, está manejando correctamente la ID, pero el nombre solo se registra como una cadena vacía. Si paso un nuevo objeto con el nombre y la identificación por separado, el comportamiento funciona como se esperaba. ¿Qué me estoy perdiendo que está causando que el atributo de nombre se elimine?

Interfaz

 export interface CheckItem { id: number; name: string; }

Servicio

 export class ChecksService { items: CheckItem[] = checkItems; //Check items being an array of 2 check items held in assets constructor() { } addToChecks(checkItem: CheckItem){ this.items.push(checkItem); } }

componente en su totalidad

 import { Component, OnInit } from '@angular/core'; import { FormBuilder } from '@angular/forms'; import { CheckItem } from '../check-item'; import { ChecksService } from '../checks.service'; import { checkItems } from 'src/assets/journaldata'; import { CheckItemComponent } from '../check-item/check-item.component'; @Component({ selector: 'app-new-check-item', templateUrl: './new-check-item.component.html', styleUrls: ['./new-check-item.component.css'] }) export class NewCheckItemComponent implements OnInit { private newCheckItem : CheckItem = {id: 5, name: "Why"}; checkItemForm = this.formBuilder.group({ checkName : '' }) onSubmit(): void { console.log(this.newCheckItem.name); this.newCheckItem.name = this.checkItemForm.value.checkName!; this.checkItemForm.reset(); console.log(this.newCheckItem.name); this.checkService.addToChecks(this.newCheckItem); this.checkService.addToChecks({id:5, name:this.newCheckItem.name}) console.log(checkItems); } constructor( private checkService: ChecksService, private formBuilder : FormBuilder ) {} ngOnInit(): void { } }

Salida de la consola:

 Why TestName (4) [{…}, {…}, {…}, {…}] 0: {id: 1, name: 'Test'} 1: {id: 2, name: 'Another Test'} 2: {id: 5, name: ''} 3: {id: 5, name: 'TestName'}
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

su función addToChecks está agregando una referencia al CheckItem entrante a su matriz, no una copia. Por lo tanto, cuando restablece el name de newCheckItem para que esté vacío ( this.newCheckItem.name = '' ), la matriz hace referencia al mismo objeto y, por lo tanto, también mostrará un nombre vacío. En cambio, lo que puede hacer es almacenar una copia del parámetro entrante en su matriz:

 addToChecks(checkItem: CheckItem){ this.items.push({ ...checkItem }); }
about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda