2016-09-08 4 views
1

Ich entwickle etwas wie ein CMS. Ich habe Artikel, die Vorlagen haben. Artikel werden im Backend hinzugefügt und ich muss sie mithilfe von Vorlagen anzeigen (wenn ich den Artikel rende, weiß ich, welche Vorlage zu verwenden). Da es 10s Vorlagen gibt, versuche ich herauszufinden, wie man die Vorlagen am besten speichert und wie man die richtige Vorlage nach geladenen Artikeln lädt. Was Ich erwäge:Angular 2 dynamische Vorlagen

  • Metadaten speichern über eine Vorlage auf Back-End und den Aufbau der Vorlage, wenn ich es
  • müssen die Vorlagen in der Anwendung speichern (müssen die App bauen, wenn neue Vorlage erstellt wird)
  • Speichern von roh-Vorlagen auf Backend
  • eine Komponente für jede Vorlage zu haben und laden sie dynamisch (zu viel Overhead)

ich suche eine architektonische und te chnologische Lösung. Ich würde gerne mit Option 1 gehen, aber nicht wissen, wie man eine Vorlage für Artikel Komponente erstellen. Ich würde gerne nur eine Komponente haben, die den Artikel bekommt und nur die benötigte Vorlage lädt (baut).

Angular2 RC5

EDIT:

Vorlage A: A von CSS-Regeln (blauen Text, Kappen für Schlagzeilen) gesetzt, Überschrift, Absatz, Bild, Absatz und einen Link irgendwo anders (im Abschnitt) Vorlage B: Satz B von CSS-Regeln (roter Text, regelmäßige Schlagzeilen), Schlagzeile, Karussell für Bilder, ein Absatz

{ 
"templateId": 1, 
"title": "Article title", 
"elements": [{ 
    "text": "paragraph text" 
}, { 
    "image": "http: //someurl.com" 
}, { 
    "text": "another paragraph text" 
}] 

}

+0

Im Allgemeinen möchte Angular2 die Vorlage mit dem Rest der App kompiliert und bereitgestellt werden. Hätten die Vorlagen nur ein anderes Layout? Oder würde es auch Verhaltensunterschiede geben? IMO eine einzige Komponente mit einer ngSwitch-Anweisung, die zwischen einer der Artikel Vorlagen wechselt, ist Ihre beste Wette. – cDecker32

+0

Ich habe einige Beispiele für Vorlagen hinzugefügt. Ist es sogar möglich, eine Vorlage basierend auf einem Array von Elementen zu erstellen, die ich in der Vorlage hinzufügen soll? Ich habe über ngSwitch oder ngIf nachgedacht, ich denke nur, dass es mit der Zeit viel zu komplex wird. – Zoidy

+0

Ich bin nicht sicher, was Sie von "einem Array von Elementen in der Vorlage hinzufügen möchten". aber ich werde eine Antwort auf was ich denke, Ihre beste Wette ist hier. – cDecker32

Antwort

1

Ich denke, Ihre beste Wette ist, eine Komponente für jeden Stil zu haben, mit einer Elternkomponente, die einen ngSwitch verwendet, um zwischen den Artikeln zu wechseln. So ...

<article-component> 
    <div ngSwitch="article.type"> 
    <template-a *ngSwitchCase="a" [article]="article"> 
    </template-a> 
    <template-b *ngSwitchCase="b" [article]="article"> 
    </template-b> 
    <template-c *ngSwitchCase="c" [article]="article"> 
    </template-c> 
    </div> 
</article-component> 

Darüber hinaus bin ich nicht sicher, was Sie tun können, ohne zu wissen, was die „Artikel“ Datenmodell aussieht.

EDIT: Ok, nachdem Sie Ihr vorgeschlagenes Datenmodell gesehen haben, können Sie innerhalb Ihrer Vorlagen einen ngSwitch in einem ngFor ausführen, der über Ihr "elements" -Array iteriert. Ich weiß, das ist eine Art Janky, aber es ist wahrscheinlich deine beste Wette. Und dann teilte obv "paragraph", "image" und "carousel" -Komponenten, die zwischen den verschiedenen Artikelvorlagen verwendet werden sollten.

+0

Würde das bedeuten, dass ich für jede Vorlage, die ich vorbereite, noch separate Komponenten haben müsste? – Zoidy

+0

Grundsätzlich ja. Sie können immer noch etwas Flexibilität in Ihren Vorlagen haben, um die Anzahl der Duplikate zu reduzieren. Ohne Ihr Datenmodell dafür zu sehen, kann ich nicht wirklich mehr kommentieren. Und wenn Sie meine Antwort nicht mögen, können Sie versuchen mit .createComponent() http://stackoverflow.com/questions/37618222/how-do-i-dynamically-inject-an-angular2-sub-component-via -typescript-code – cDecker32

+0

Ich denke immer noch über das Datenmodell nach, aber ich habe meinen Entwurf zu meiner Frage hinzugefügt. Vielen Dank für Ihre Hilfe – Zoidy