2016-04-11 16 views
4

Ich habe eine eckige Anwendung, und ich habe ein Problem. Ich habe eine (übergeordnete) Komponente mit einem Array von Elementen, für jedes Element gibt es eine untergeordnete (untergeordnete) Komponente. Die untergeordneten Komponenten haben jeweils eine Schaltfläche (und Funktion), um sich selbst zu löschen, aber die übergeordnete Komponente wird nicht über dieses stattfindende Ereignis benachrichtigt.Angular2 Kind Komponente löschen

Ich bin mir nicht sicher, was die richtige Art ist, die untergeordnete Komponente so zu entfernen, dass die übergeordnete Komponente sie aus der Ansicht entfernt. Ich rufe gerade delete this.product (Produkt ist eines der Elemente im übergeordneten Array), die tatsächlich aus dem übergeordneten Array entfernt, aber das übergeordnete Array wird nicht aktualisiert.

+0

Blick in @Output() mit EventEmitter. Dann können Sie den Eltern auf Kinderereignisse warten lassen. – VtoCorleone

Antwort

8

Sie können dies auf diese Weise in der Komponente Kind implementieren:

@Component({ 
    selector: 'child', 
    template: ` 
    <div> 
     {{element.name}} 
     <span (click)="deleteElement()">Delete</span> 
    </div> 
    ` 
}) 
export class ChildComponent { 
    @Input() 
    element: any; 
    @Output() 
    elementDeleted: EventEmitter<any> = new EventEmitter(); 

    deleteElement() { 
    this.elementDeleted.emit(); 
    } 
} 

und nutzen diese Veranstaltung im parent:

@Component({ 
    selector: 'child', 
    template: ` 
    <div> 
     <child *ngFor="#element of elements" [element]="element" 
      (elementDeleted)="onElementDeleted(element)"> 
     </child> 
    </div> 
    ` 
}) 
export class ParentComponent { 
    constructor() { 
    this.elements = [ 
     { name: 'element1' }, 
     { name: 'element2' }, 
     (...) 
    ]; 
    } 

    onElementDeleted(element) { 
    var index = this.elements.findIndex((elt) => (elt===element)); 
    if (index != -1) { 
     this.elements.splice(index, 1); 
    } 
    } 
+0

Was ist der Unterschied zwischen der Verwendung von 'inputs: ['element']' im obigen Abschnitt '@ Component' und der Verwendung von' @Input() 'in der Klasse selbst? –

+0

Es ist in der Tat ähnlich ... –

+0

Sie müssen '(elementDeleted) =" onElementDeleted ($ event) "' in der Vorlage (anstelle von '(elementDeleted) =" onElementDeleted (Element) "'). Das hat sich wahrscheinlich geändert, seit du die Antwort gepostet hast. – Juicy

Verwandte Themen