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

143
Visualizações
¿Hay alguna manera de activar la detección de cambios en Angular para actualizar una matriz en la vista cuando se elimina un elemento?

Tengo este componente con una propiedad de cliente.

 import { Component } from '@angular/core'; @Component({ selector: 'app-update-view', templateUrl: './update-view.component.html', styles: [ ] }) export class UpdateView { public client: string[] = ['client 1', 'client 2', 'client 3', 'client 4']; constructor() { } deleteClient() { this.client.pop(); } }

En el html imprimo el objeto así.

 <div class="col md:col-6"> <div> <strong>Client</strong> <pre>{{ Client }}</pre> </div> <button (click)="deleteClient()">Delete Client</button> </div>

Sé que esta no es la forma de imprimir la matriz, debería usar 'ngFor e imprimir los elementos uno por uno, pero quiero saber si hay una forma de actualizar la matriz en el html después de eliminar un cliente porque sé cuándo haga clic en Eliminar cliente, la matriz en el html permanece igual.

Esta pregunta la hago por curiosidad, se que esta forma de imprimir arrays no es correcta pero quiero saber si hay alguna forma de actualizar la vista.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

La respuesta directa a su pregunta es inyectar ChangeDetectionRef y llamar a markForCheck .

 export class UpdateView { public client: string[] = ['client 1', 'client 2', 'client 3', 'client 4']; constructor(private cdr: ChangeDetectionRef) { } deleteClient() { this.client.pop(); this.cdr.markForCheck(); } }

Pero la verdadera respuesta es averiguar por qué esto no se actualiza. El tipo de codificación que está haciendo se llama codificación "mutable". Así es como la gente codificaría en AngularJS. Mutar objetos y luego ejecutar la detección de cambios en esos objetos es la razón por la cual AngularJS tuvo un ciclo de detección de cambios tan lento. La forma en que funciona la detección de cambios de Angular es que solo ejecuta la detección de cambios en un objeto si la referencia al objeto (en este caso, una matriz) es una referencia a un objeto diferente. Como está llamando a pop , está apuntando a la misma matriz, por lo que es probable que Angular no ejecute CD en él.

El siguiente código le dará lo que quiere Y activará el CD de Angular. El siguiente código actualiza this.client para que sea una nueva matriz, que hará que la interfaz de usuario se actualice automáticamente.

 // THIS IS THE RIGHT ANSWER!!! this.client = this.client.slice(0, -1);

Al hacer esto, se está apoyando en la programación inmutable, lo que hace que la detección de cambios sea mucho más rápida y económica.

about 4 years ago · Juan Pablo Isaza Relatório

0

Intente usar json pipe y cambie <pre>{{ client | json }}</pre> en lugar de <pre>{{ Client }}</pre> .

 <div class="col md:col-6"> <div> <strong>Client</strong> <pre>{{ client | json }}</pre> </div> <button (click)="deleteClient()">Delete Client</button> </div>
about 4 years ago · Juan Pablo Isaza 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