2016-03-19 18 views
1

In Angular2 nehme ich an, dass ich zwei Komponenten habe, eine Liste und ein Listenelement. Ich möchte, dass Listenelement NUR in einer Liste platzierbar ist:Angular2 - Wie wird die Durchsetzung von Nur-Kind-Komponenten durchgeführt?

<my-list> 
    <my-list-item>Foo</my-list-item> 
</my-list> 

Gibt es eine Möglichkeit, dies im TypeScript zu erzwingen?

+0

Sie 'my-list-item' Richtlinie nur Arbeit zu sagen, bedeutet nicht drin ist sein sollte, wenn es gewickelt mit 'meiner-Liste'? –

+0

Ja. my-list-item sollte nur in der my-list existieren können – kurzweil4

+0

Wie steht TypeScript dazu? Wenn Sie möchten, dass sich 'my-list-item' nur in der' my-list' befindet, schreiben Sie es nirgendwo anders. –

Antwort

0

In Ihrem my-list-item Komponente tun dies

und my-list-item nicht machen, wenn es my-list

import {Component, ElementRef} from 'angular2/core'; 

@Component({ 
    selector: 'my-list-item', 
    template: '<div *ngIf="insideMyList"> <ng-content></ng-content> </div>' 
}) 
export class MyListItem{ 
    public insideMyList: boolean = false; 

    constructor(elementRef: ElementRef) { 
    if(elementRef['internalElement'].parent.nativeElement.localName == 'my-list') 
    { 
     //do other stuff here 
     this.insideMyList = true; 
    } 
    } 
} 
+0

Was ist, wenn' my-list' Element im Elternteil vorhanden ist, aber es ist Elternteil des Elternteils? –

+0

dann statt nur unmittelbar übergeordnete überprüfen Sie eine Schleife für "Eltern des Elternteils", bis übergeordnete wird 'meine-Liste' oder' undefined' oder 'body' –

Verwandte Themen