2017-04-09 4 views
-1

Ich habe ein Problem mit verschachtelten * ngfor in eckigen 4, was ich tun muss, löschen Eltern ngfor ich habe versucht mit der Einstellung auf null und mit delete und keiner funktioniert so bin ich irgendwie Optionen. Was passiert eigentlich, wenn Sie das Parent ngFor angular misbehaves löschen (zumindest denke ich) und einen Fehler auslöst.eckig 4 ​​nested * ngFor auf löschen Elternfehler

Können Sie mir helfen und mir den richtigen Weg zeigen, um verschachtelte * ngfor zu machen, in denen es möglich ist, Kinder zu entfernen, oder jetzt in eckigen 4 ist es auf eine andere Weise getan?

Ich habe diese Testkomponente

@Component({ 
 
    selector: 'test-parent', 
 
    templateUrl: './test.component.html', 
 
}) 
 
export class TestComponent { 
 
    constructor() { 
 
     console.log("loaded menu"); 
 
     setTimeout(()=> { 
 
      this.data.categories[1] = null; 
 
     }, 1000); 
 
    }; 
 
    data = { 
 
     categories: [ 
 
      { 
 
       name: 'name 1', 
 
       items: [ 
 
        { 
 
         name: 'item 1' 
 
        }, 
 
        { 
 
         name: 'item 2' 
 
        }, 
 
       ] 
 
      }, 
 
      { 
 
       name: 'name 2', 
 
       items: [ 
 
        { 
 
         name: 'item 3' 
 
        } 
 
       ] 
 
      } 
 
     ] 
 
    } 
 
}
<div *ngFor="let c of data.categories"> 
 
    {{c.name}} 
 
    <div *ngFor="let i of c.items"> 
 
     {{i.name}} 
 
    </div> 
 
</div>
erstellt

dies ist der Fehler, kann nicht viel von ihm anderen lesen, als es versucht, Elemente von null zu lesen, wenn ich löschen versuchen, als gleicher Fehler statt Null von undefined, Muss ich irgendwie sagen, dass Daten geändert werden, ist dieser Teil nicht mehr magisch? Wenn ich this.data.categories [0] = [] oder = {} es aktualisiere gut das Ding ist, ich möchte Daten löschen, weil ich es an den Server übergeben möchte, und weil Benutzer delete gedrückt: '(Kann nicht glauben so etwas ist einfach nicht möglich?

ERROR TypeError: Cannot read property 'items' of null 
at Object.View_TestComponent_1.currVal_0 [as updateDirectives] (TestComponent.html:3) 
at Object.debugUpdateDirectives [as updateDirectives] (core.es5.js:12613) 
at checkAndUpdateView (core.es5.js:12025) 
at callViewAction (core.es5.js:12340) 
at execEmbeddedViewsAction (core.es5.js:12312) 
at checkAndUpdateView (core.es5.js:12026) 
at callViewAction (core.es5.js:12340) 
at execComponentViewsAction (core.es5.js:12286) 
at checkAndUpdateView (core.es5.js:12031) 
at callViewAction (core.es5.js:12340) 
at execEmbeddedViewsAction (core.es5.js:12312) 
at checkAndUpdateView (core.es5.js:12026) 
at callViewAction (core.es5.js:12340) 
at execComponentViewsAction (core.es5.js:12286) 
at checkAndUpdateView (core.es5.js:12031) 
+0

Warum nicht das Array spleißen? Gibt es einen Grund, der nicht funktionieren würde? –

+0

Ich habe es versucht, es funktioniert mit diesem Testszenario, aber tbh ich habe wie 4 geschachtelt für Schleifen durch verschiedene Komponenten, alteought sollte es funktionieren Ich bekomme den gleichen Fehler –

Antwort

2

Zum Artikel Entfernen von Array, sollten Sie Array.splice(index, length) verwenden.


delete verwendet, wird das Element tobt undefined, aber immer noch da machen (ein Element der das Array) gleich mit Einstellung auf null. Und für Ihre Situation, diese wi führt zu Fehler cannot find something of null/undefined

+0

Vielen Dank, es hat funktioniert, ich dachte, ich habe es versucht und didn ' t Arbeit, löscht nicht vollständig löscht Mitglied des Feldes? –

+0

@VjeranMagisterLudi Haben Sie noch ein Problem? – Pengyy

+0

Nein, es ist behoben, ich mache einige umfangreiche Tests jetzt –