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.
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
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:
DynamicLoaderService
ist ein globaler Dienst, der Komponentenfactorys lädt und speichert.
Hoffe es hilft dir!
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!
Tags und Links javascript angular typescript