J'ai un tableau d'objets (appelons-le arr
). Dans l'une des entrées de mon composant dans la méthode (change)
, je modifie l'un des attributs de ces objets, mais dans la vue (*ngFor
) rien ne change. J'ai lu que la détection de changement Angular2 ne vérifie pas le contenu des tableaux ou des objets, j'ai donc essayé ceci:
this.arr = this.arr.slice();
et
this.arr = [...this.arr];
Mais la vue ne change pas, elle affiche toujours l'ancien attribut. Dans la méthode (change)
avec console.log()
, j'ai le tableau correct. Bizarre, mais celui-ci fonctionne: this.arr = [];
J'ai aussi essayé NgZone
et markForCheck()
.
Essayez de créer une copie en profondeur en faisant
this.arr = Object.assign({}, NEW_VALUE);
J'ai résolu cette erreur en ajoutant une directive changDetection sur @component comme suit
@Component({
selector: 'app-page',
templateUrl: './page.component.html',
styleUrls: ['./page.component.scss'],
changeDetection: ChangeDetectionStrategy.Default
})
Vous devez également l'importer
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
Il y a deux stratégies onPush et Default
OnPush utilise la stratégie CheckOnce, ce qui signifie que la détection automatique des modifications est désactivée jusqu'à sa réactivation en définissant la stratégie sur Par défaut (CheckAlways). La détection de changement peut toujours être explicitement invoquée.
alors que Default utilise la stratégie CheckAlways, dans laquelle la détection des modifications est automatique jusqu'à ce qu'elle soit explicitement désactivée.
Source Docs