Ich versuche, ein Registerkartensystem einzurichten, mit dem sich Komponenten selbst registrieren können (mit einem Titel). Die erste Registerkarte ist wie ein Posteingang. Für die Benutzer stehen zahlreiche Aktionen / Linkelemente zur Auswahl. Mit jedem dieser Klicks sollte eine neue Komponente beim Klicken instanziiert werden können. Die Aktionen / Links stammen von JSON.
Die instanziierte Komponente registriert sich dann als neue Registerkarte.
Ich bin mir nicht sicher, ob dies der "beste" Ansatz ist. Bisher habe ich nur Anleitungen für statische Registerkarten gesehen, was nicht hilft.
Bisher habe ich nur den Tabs-Dienst, der hauptsächlich gebootet ist, um in der gesamten App zu bestehen. Es sieht ungefähr so aus:
export interface ITab { title: string; }
@Injectable()
export class TabsService {
private tabs = new Set<ITab>();
addTab(title: string): ITab {
let tab: ITab = { title };
this.tabs.add(tab);
return tab;
}
removeTab(tab: ITab) {
this.tabs.delete(tab);
}
}
Fragen:
- Wie kann ich eine dynamische Liste im Posteingang haben, die neue (verschiedene) Registerkarten erstellt? Ich vermute, dass das verwendet werden
DynamicComponentBuilder
würde? - Wie können die Komponenten aus dem Posteingang (per Klick) erstellt werden, sich als Registerkarten registrieren und auch angezeigt werden? Ich vermute
ng-content
, aber ich kann nicht viele Informationen darüber finden, wie man es benutzt
EDIT: Ein Versuch zu klären.
Stellen Sie sich den Posteingang als Posteingang vor. Elemente werden als JSON abgerufen und es werden mehrere Elemente angezeigt. Sobald auf eines der Elemente geklickt wird, wird eine neue Registerkarte mit dem Elementaktionstyp "Elemente" erstellt. Der Typ ist dann eine Komponente.
EDIT 2: Bild .
quelle
Antworten:
aktualisieren
Angular 5 StackBlitz Beispiel
aktualisieren
ngComponentOutlet
wurde zu 4.0.0-beta.3 hinzugefügtaktualisieren
Es ist eine
NgComponentOutlet
Arbeit in Arbeit, die etwas Ähnliches tut https://github.com/angular/angular/pull/11235RC.7
Plunker Beispiel RC.7
Anwendungsbeispiel
Siehe auch angle.io DYNAMISCHER KOMPONENTENLADER
ältere Versionen xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Dies hat sich in Angular2 RC.5 erneut geändert
Ich werde das folgende Beispiel aktualisieren, aber es ist der letzte Tag vor dem Urlaub.
Dieses Plunker-Beispiel zeigt, wie Komponenten in RC.5 dynamisch erstellt werden
Update - Verwenden Sie ViewContainerRef .createComponent ()
Da dies
DynamicComponentLoader
veraltet ist, muss der Ansatz erneut aktualisiert werden.Plunker-Beispiel RC.4
Plunker-Beispiel Beta.17
Update - Verwenden Sie loadNextToLocation
Plunker Beispiel Beta.17
Original
Ich bin mir aus Ihrer Frage nicht ganz sicher, was Ihre Anforderungen sind, aber ich denke, dies sollte tun, was Sie wollen.
Die
Tabs
Komponente erhält ein Array von übergebenen Typen und erstellt "Registerkarten" für jedes Element im Array.Plunker-Beispiel Beta.15 (basiert nicht auf Ihrem Plunker)
Es gibt auch eine Möglichkeit, Daten weiterzugeben, die an die dynamisch erstellte Komponente wie übergeben werden können (
someData
müsste wie übergeben werdentype
)Es gibt auch Unterstützung für die Verwendung der Abhängigkeitsinjektion mit gemeinsam genutzten Diensten.
Weitere Informationen finden Sie unter https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
quelle
DclWrapper
, damit eine tatsächliche Instanz erstellt wird.ViewContainerRef
anstatt zu verwendenViewChild
, dann wird<dcl-wrapper>
selbst das Ziel. Elemente werden als Geschwister des Ziels hinzugefügt und befinden sich daher außerhalb<dcl-wrapper>
dieses Weges.''
(leere Zeichenfolge) `und den Konstruktor in ändernconstructor(private target:ViewContainerRef) {}
, dann werden dynamisch hinzugefügte Komponenten zu Geschwistern von<dcl-wrapper>
Ich bin nicht cool genug für Kommentare. Ich habe den Plunker aus der akzeptierten Antwort repariert, um für rc2 zu arbeiten. Nichts Besonderes, Links zum CDN waren nur kaputt ist alles.
https://plnkr.co/edit/kVJvI1vkzrLZJeRFsZuv?p=preview
quelle
es ist gebrauchsfertig Komponente (RC5 kompatibel) NG2 Schritte welche Verwendungen
Compiler
einzuspritzen Komponente zu Schritt Behälter und Service für die Verdrahtung alles zusammen (data sync)quelle