Laden Sie vorhandene Komponenten dynamisch. Angular 2 Final Release

8

Ich versuche, dynamisch eine Komponente in der endgültigen Version 2.0.0 zu laden.

Unter Verwendung von RC5 habe ich geladen mit dem folgenden Code:

Erstellen Sie eine Anweisung zum Laden der Steuerelemente:

%Vor%

Dann hat diese Direktive auf meiner Seite geladen:

%Vor%

Aber nach dem Update von rc5 auf 2.0.0 final release existiert der Resolver nicht mehr, er wurde durch Compiler ersetzt.

Ich habe viele Orte gefunden, die zeigen, wie man es mit verschiedenen Codes lädt, aber all diese sind zu komplex und ich konnte es nicht funktionieren lassen.

Nehmen Sie dies zum Beispiel: Wie kann ich eine dynamische Vorlage verwenden, um dynamische Komponenten mit Angular 2.0 zu kompilieren?

Es sieht spezifischer für dieses Szenario aus, mein ich muss nur die Komponente laden und ein @Input genanntes Modell festlegen.

Eine Sache, als ich versuchte, ich musste dynamisch ein Modul für jede Komponente erstellen und dann die Komponente hinzufügen. Aber dann hatte ich Probleme zu sagen, dass die Komponente in mehr als einem Modul gesetzt wurde, versuchen Sie, an einem Ort zu entfernen, funktioniert nicht.

Der größte Teil des angezeigten Codes, den ich von diesem Link bekomme: Ссылка

Und hat ein paar Änderungen vorgenommen.

  

Aktualisieren

Ich schaffe es mit dem folgenden Ansatz:

Die create-Methode wurde in

geändert %Vor%

Die meisten Orte, die ich gefunden habe, legen Sie die Komponente und setzen Sie es auf das DynamicModule, das Problem mit dem ist, wenn Sie bereits diese Komponente in einem anderen Modul deklarieren, Winkel wird sich beschweren. Die Lösung in meinem Fall war, das ControlsModule zu importieren, bei dem alle meine Steuerelemente exportiert werden.

    
Abner 24.09.2016, 17:15
quelle

2 Antworten

10

Aktualisieren

NgComponentOutlet wurde in 4.0.0-beta.3 eingeführt Ссылка

  

In Kürze NgComponentOutlet

Ich sehe zwei Möglichkeiten, dies zu tun:

1) Verwenden Sie ComponentFactoryResolver .

Es verwendet die bereits generierte Factory und der Code sieht ungefähr so ​​aus:

%Vor%

In diesem Fall müssen wir die dynamische Komponente in den Eigenschaften declarations und entryComponents im Dekorator des Moduls

definieren %Vor%

2) Verwenden Sie den Compiler

In diesem Fall können wir die Modulkompilierung nur mit compiler.compileModuleAndAllComponentsAsync ausführen und dann die Komponente aus dem componentFactories-Array finden. Ihre Anweisung könnte so aussehen:

%Vor%

DynamicLoaderService ist ein globaler Dienst, der Komponentenfactorys lädt und speichert.

%Vor%

Plunker-Beispiel

Hoffe es hilft dir!

    
yurzui 24.09.2016, 20:40
quelle
0

Es war für mich nützlich, diese Option basierend auf einer Direktive zu sehen, aber ich fand die, die meinen Anforderungen entsprach, basierend auf Komponenten: Ссылка

Glückliche Kodierung!

    
Mateo Tibaquirá 06.05.2017 04:05
quelle

Tags und Links