2016-06-06 6 views

Antwort

1

Ich habe es nicht mit der Wurzel Komponente selbst versucht noch, aber ich nehme es das gleiche wie mit anderen Komponenten funktioniert:

class AppComponent { 
    constructor(private vcRef:ViewContainerRef) {} 
} 
+0

danke Günter Zöchbauer, es funktioniert von einer anderen Komponente als AppComponent vielen Dank Günter Zöchbauer –

+0

Dann legen Sie es auf einen gemeinsamen Dienst und erwerben Sie es von diesem Dienst, wo Sie es brauchen. Soweit ich weiß, gibt es keinen offiziellen Weg, 'ViewContainerRef' von der Root-Komponente von außerhalb der Root-Komponente zu bekommen. –

+0

Tut mir leid, es funktioniert nicht, ich kann meinen Kommentar nicht bearbeiten Sie haben Recht, ich sollte Root ViewContainerRef im Speicher behalten, bis ich es brauche aber ist dies die beste Lösung? –

6

OLD WAY: Winkel 2.0.0-rc.3

Diese insgesamt Hack ist und in keiner Weise die richtige Weg, um die Wurzel ViewContainerRef, aber ich bekommen w als nicht in der Lage, einen offiziellen Weg zu finden, dies zu tun. Da dies keine öffentlichen Eigenschaften sind, können sie sich jederzeit ändern und diese Methode würde nicht mehr funktionieren. Diese Methode funktioniert immer noch ab 2.0.0-rc.3.

class SomeComponent { 
    constructor(private appRef: ApplicationRef) { } 
    let viewRef: ViewContainerRef = appRef['_rootComponents'][0]['_hostElement'].vcRef; 
} 

Es gibt auch noch eine offene Frage für das auf GitHub: https://github.com/angular/angular/issues/9293

UPDATE: Eckige 2.4.2

Das obige Verfahren nicht mit den späteren Versionen von Angular arbeiten (Stand: 2.4.2).

Die Methode, die ich jetzt verwenden, ist dies:

In der Wurzelkomponente des ViewContainerRef passieren, damit Sie es später verweisen können:

class AppComponent { 
    constructor(public viewRef: ViewContainerRef) { } 
} 

Und dann in der Komponente oder eine Dienstleistung, die Sie die erhalten möchten root ViewContainerRef:

class SomeOtherComponent { 
    constructor(private appRef: ApplicationRef) { } 

    let viewRef = (appRef.components[0].instance as AppComponent).viewRef; 
} 

die oben wird in der Instanz der Wurzelkomponente bringen, und da Sie die ViewContainerRef im Konstruktor injiziert (und gemacht es öffentlich) Sie können jetzt direkt darauf verweisen.

+0

vielen dank @dsara –

Verwandte Themen