Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

342
Visualizações
*ngPara restablecer todos los valores de formulario al agregar un nuevo elemento de entrada

Tengo una aplicación Angular2 con un botón que puede agregar otro préstamo a mis préstamos. Mi *ngFor es bastante simple también:

 <div *ngFor="let loan of myLoans"> <label>{{loan.name}}</label> <input type="text" name="loan.name" [(ngModel)]="loan.amount"> </div>

myLoans es una matriz de objetos de préstamo con parámetros de name y amount . Mi botón también es muy simple.

 <button id="addLoan" type="button" (click)="addLoan()">Legg til lån</button>

La función añadirPréstamo():

 addLoan(): void{ var newLoan = new Loan(); this.myLoans.push(newLoan); }

Mi problema es que cuando agrego un nuevo préstamo en la lista, cualquier valor que tenía en el campo de entrada para mis otros préstamos vuelve a 0 o cualquier valor que establecí en el constructor para el objeto de préstamo.

Cargar la aplicación muestra esta imagen

Ahora que

ngModel funciona al escribir un número

ingrese la descripción de la imagen aquí

Después de presionar el botón "Legg til lån", el valor de la primera entrada se restablece

ingrese la descripción de la imagen aquí

ngModel sigue funcionando para la primera entrada si intento poner otro número

ingrese la descripción de la imagen aquí

¿Alguien tiene una idea de lo que está pasando aquí?

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

AJT_82 está cerca del problema, ya que los nombres no únicos le están causando un problema, sin embargo, puede hacer una solución aún más simple, y una más en la línea de lo que probablemente deseaba, cambiando su plantilla html a esto

 <div *ngFor="let loan of myLoans"> <label>{{loan.name}}</label> <input type="text" [name]="loan.name" [(ngModel)]="loan.amount"> </div>

Observe el cambio de poner el nombre en [ ]. Esto garantizará que la plantilla mantenga un vínculo con el nombre y, siempre que el nombre de cada préstamo sea único, también lo será el identificador.

Actualización: si el nombre no es único, puede agregarle el índice para que sea único.

 <div *ngFor="let loan of myLoans; let i=index"> <label>{{loan.name}}</label> <input type="text" [name]="loan.name + '_' + i" [(ngModel)]="loan.amount"> </div>
about 4 years ago · Santiago Trujillo Relatório

0

Estoy 99% seguro de que está utilizando un formulario, sin tener atributos de name únicos, ya que ngModel funciona.

El atributo de nombre tiene que ser único para ser evaluado como campos separados. A Angular realmente no le importa el ngModel en los formularios, sino que mira el atributo de name en su lugar.

Tenga en cuenta que el atributo de nombre que ha establecido actualmente: name="loan.name" en realidad contiene solo la cadena literal de loan.name no el valor real de su modelo, por lo tanto, el nombre no es único.

Entonces, cuando está impulsando un nuevo loan , todos los demás préstamos obtienen el mismo valor que el valor recién impulsado, ya que todos los campos se evalúan como uno solo.

Esto se puede solucionar fácilmente agregando el índice en el atributo de nombre, por ejemplo:

 <div *ngFor="let loan of myLoans; let i=index"> <label>{{loan.name}}</label> <input type="text" name="loan.name{{i}}" [(ngModel)]="loan.amount"> </div>
about 4 years ago · Santiago Trujillo Relatório

0

@Joo_Beck sugirió usar [name]=loan.name en lugar de name='loan.name' . Pero esto no funcionó para mí. Acabo de agregar un índice {{i}} con el nombre que se indica a continuación y funcionó perfectamente.

 <div *ngFor="let loan of myLoans; let i=index"> <label>{{loan.name}}</label> <input type="text" name="loan.name{{i}}" [(ngModel)]="loan.amount"> </div>

@AJT_82 sugiere la solución que funcionó para mí. ¡Gracias por!

¡Gracias @Cassiano, explicaste muy bien el motivo!

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda