2016-09-21 3 views
0

Angenommen, es gibt zwei Ansichten des Produkts, und ich möchte eine dieser Ansichten basierend auf Benutzereinstellungen anzeigen.eckig 2 - So importieren/injizieren Sie eine Komponente zur Laufzeit

Ich denke, dass zwei Ansichten <my-product> in zwei verschiedenen Ordnern verwaltet werden und nachdem Benutzer angemeldet ist, möchte ich aus einem Ordner basierend darauf importieren, wie der Benutzer das Produkt anzeigen möchte.

Folder 1 
----MyProductComponent //exports MyProductComponent with selector <my-product></my-product> 
Folder 2 
----MyProductComponent //exports MyProductComponent with selector <my-product></my-product> 
App 
----App.Component // here I would like to import the component at runtime from either folder 1/2 based on user preferences 

Bitte teilen Sie Ihre Erkenntnisse dazu. Gibt es Alternativen, wenn dies auf Komponentenebene nicht erreicht werden kann (zB auf Routing-Ebene)?

Antwort

1

Warum nicht einfach ein * ngIf auf zwei Elementen haben, die basierend auf den Präferenzen des Benutzers ausgetauscht werden?

<my-product1 *ngIf="userPref1"></my-product1> 
<my-product2 *ngIf="!userPref1"></my-product2> 

Wo userPref1 ist eine Variable (oder die Funktion), die auf App.Component die durch eine Benutzereingabe eingestellt wird.

Dann kann der Benutzer ihre Präferenz angeben und die Anwendung wird die Ansichten basierend auf ihrer Eingabe tauschen und Sie müssen nicht mehr mit dem Import zur Laufzeit beschäftigen.

+0

Thaks Joffutt, ich dachte darüber nach, aber ich möchte die Hauptkomponente (App.Component in diesem Fall) nicht ändern. Es könnte viele Orte geben, die ich vielleicht benutze und anstatt alle diese Orte zu ändern, bevorzuge ich einfach einen Präferenzordner (zum Beispiel PREF2) und füge eine erforderliche Ansicht darin hinzu. Ich hoffe nur, wenn es eine Möglichkeit gibt, eine Komponente aus einem Ordner zu importieren, der Pfad nur zur Laufzeit bekannt ist. –

+0

Ok cool .. jetzt habe ich eine Idee .. kann eine weitere Komponente erstellen, die mit exportiert und wenn erforderlich hinzufügt oder Schalter Fälle (wie Husein erwähnt) und verwenden Sie diese Komponente woanders .. so kann ich nur an einer Stelle ändern ... Ich werde Ihre als eine Antwort markieren .. Vielen Dank für Ihre Eingabe .. –

1

Sie sollten [ngSwitch] basierend auf den Vorlieben des Benutzers verwenden und dann in *ngSwitchCase diese bestimmte Komponente laden. In Wirklichkeit laden Sie Ihre Komponenten nicht faul. Sie sind alle vorinstalliert, aber Sie verwenden nur die DOM-Manipulationsmethoden von Angular, um die eine oder die andere Komponente ein- oder auszublenden.

Zum Beispiel:

<div [ngSwitch]="someUserPreference"> 
    <div *ngSwitchCase="grid"> 
     <my-grid-list></my-grid-list> 
    </div> 
    <div *ngSwitchCase="card"> 
     <my-card-view-grid></my-card-view-grid> 
    </div> 
    <div *ngSwitchDefault> 
     <!-- Incorrect preference, let's show grid as a fallback --> 
     <my-grid-list></my-grid-list> 
    </div> 
</div> 

Grundsätzlich, wenn ein Benutzer ihre Präferenz ändert, wird dies in dem Code reflektiert werden. Entweder ändern sie die Voreinstellung über eine Schaltfläche, eine Optionsschaltfläche oder was auch immer. Sie müssen diesen Wert in someUserPreference Variable oder Eigenschaft speichern, die in der switch-Anweisung verwendet wird.

+0

Vielen Dank Husein für Ihre Eingaben, Joffutt teilte auch ähnliche Ansichten und ich markierte seine als Antwort. Danke noch einmal!! –

+0

Keine Sorgen @RaviSamanthapudi. Es ist wichtig, dass Ihre Frage beantwortet wurde. –

Verwandte Themen