2016-05-25 19 views
3

Ich verwende * ngFor innerhalb einer Seitenvorlage (Ionic 2).ngNicht aktualisieren, wenn das Objekt entfernt wurde

<div class="child" *ngFor="let child of sharedParams.children"> 
     ... 
</div> 

Irgendwo in der App, ich aktualisiere die Kinder-Array, wenn Änderungen erkannt werden (hinzufügen, aktualisieren, entfernen). Ich sei es ein neues Array der Eigenschaft zuweisen:

export class SharedParams {  
    private _children: Child[]; 

    constructor(children: Child[]){ 
     this._children = children; 
    } 

    get children(){ 
     return this._children; 
    } 

    set children(children: Child[]){   
     this._children = children; 
    } 
} 

Wenn ein Element hinzugefügt oder innerhalb des Array aktualisiert wird der ngFor ausgelöst und das DOM aktualisiert wird. Wenn ein Element jedoch entfernt wird, wird das Array geändert, aber das DOM entfernt den Eintrag für dieses Element nicht.

Ich habe auch versucht, das Array manuell zu ändern, anstatt es zu ersetzen, mit "Push" und "Spleiß". Aber das Verhalten bleibt der Name. Das DOM wird nie aktualisiert, wenn ein Element entfernt wird.

Jede Hilfe würde sehr geschätzt werden.

+0

Welche Werte hat ' sharedParams.children' enthalten? Normalerweise sollte das Ersetzen in jedem Fall funktionieren. Kannst du einen Plunker zur Verfügung stellen? –

+0

sharedParams.children ist ein Array vom Typ Child (Child []). Dies ist eine benutzerdefinierte Klasse, die einige primitive Eigenschaften (hauptsächlich Strings) enthält. –

+0

Nie von einem solchen Problem gehört. Ich vermute ein Problem mit Ihrem Code. Ein Plunker müsste untersucht werden. –

Antwort

0

In meinem Fall ChangeDetectorRef.detectChanges() tat den Trick. Das Problem scheint zu erscheinen, wenn Sie das Modell von einem Observable aktualisieren, zum Beispiel die Antwort eines Http.get().

Die Verwendung von NgZone.run() hat nicht geholfen, das habe ich vorher versucht.

2

können Sie ChangeDetectorRef für Prüfung und Aktualisierung der Liste alle 0,5 Sekunden oder mehr ... für Beispiel

constructor(private ref: ChangeDetectorRef) { 
    console.log('Hello PhotoComponent Component'); 
    setInterval(() => { 
     this.ref.detectChanges(); 
    }, 500); 
    } 

hier für mor info ChangeDetectorRef#example

Verwandte Themen