2017-02-16 3 views
0

Ich habe eine Datenstruktur (Beispiel unten zur Verfügung gestellt), wo ich auf diese Reihe von Fragen iterieren und in der Lage sein, sie in eckigen zu template. Jede „Frage“ Diese Struktur hat:Rekursive oder komplexe Templating mit Angular 1.x

{ 
    id: 2, // unique id 
    label: 'some label', // any label 
    type: 'input', // the type of html element 
    options: [], // other questions are nested in here (recursive) 
    children: [] // other questions are nested in here (recursive) 
} 

Wie oben erwähnt, beschreibt die Art die Art des HTML-Elements und den Unterschied zwischen options und children ist, dass der Satz von questions, die in options ist Anzeige in der gleichen Zeile gerendert als die Elternfrage, während die questions innerhalb von children eine Zeile unten mit einem kleinen linken Rand wiedergegeben werden.

Ich bin nicht genug vertraut mit Angular, wie Sie dies erreichen würden, vorausgesetzt, dass die grundlegende ng-repeat hier nicht ausreichen würde (von dem, was ich verstehe) und ich bin neugierig, wie man diese Art von Daten Templating gehen würde Struktur.

Vielen Dank im Voraus für die Hilfe!

Hier ist eine beispielhafte Datenstruktur:

[ 
    { 
     id: 1, 
     label: 'something', 
     type: 'text', 
     options: [ 
      { 
       id: 2, 
       label: 'another', 
       type: 'text', 
       options: [], 
       children: [] 
      } 
     ], 
     children: [ 
      { 
       id: 83, 
       label: 'cool', 
       type: 'input', 
       options: [], 
       children: [] 
      }, 
      { 
       id: 121, 
       label: 'another cool thing', 
       type: 'label', 
       options: [ 
        { 
         id: 451, 
         label: 'only a label', 
         type: '', 
         options: [], 
         children: [ 
          { 
           id: 901, 
           label: 'a cool info', 
           type: 'label', 
           options: [], 
           children: [] 
          } 
         ] 
        } 
       ], 
       children: [] 
      } 
     ] 
    }, 
    { 
     id: 27, 
     label: 'some text', 
     type: 'label', 
     options: [ 
      { 
       id: 541, 
       label: 'hey there', 
       type: 'label', 
       options: [], 
       children: [] 
      } 
     ], 
     children: [ 
      { 
       id: 761, 
       label: 'hi there', 
       type: 'checkbox', 
       options: [], 
       children: [] 
      }, 
      { 
       id: 165, 
       label: 'cool', 
       type: 'text', 
       options: [ 
        { 
         id: 1090, 
         label: 'neat', 
         type: 'input', 
         options: [], 
         children: [ 
          { 
           id: 9891, 
           label: 'tell me', 
           type: 'textarea', 
           options: [], 
           children: [] 
          } 
         ] 
        } 
       ], 
       children: [] 
      } 
     ] 
    } 
]; 
+0

Sie müssten verschachtelte ng-repeats verwenden und ng-class anwenden, abhängig von der Art des Objekts, das Sie durchschleifen, um Optionen und untergeordnete Objekte beim Anwenden von CSS-Klassen anders aussehen zu lassen. –

+0

Ja, das ist, was ich ursprünglich hatte, aber es löst nicht die folgenden Probleme: --------- 1) verschachtelte ng-Wiederholungen ist nur so gut wie viele der Ebenen, die Sie schreiben. Deshalb frage ich mich, ob es andere Möglichkeiten gibt, dies zu tun ------- 2) ng-Klasse berücksichtigt nicht die verschiedenen Arten von HTML-Elementen. ich dachte daran, ng-switch zu benutzen und all die verschiedenen da zu haben, aber gibt es da noch einen anderen Weg? – Detuned

Antwort

1

Ich würde vorschlagen, mit ng-wenn anstelle ng-Klasse, so dass Sie eine externe HTML-Template on the fly aufrufen können. Sie könnten diese Vorlage so einstellen, dass sie innerhalb einer anderen ng-Wiederholung liegt, wenn Optionen oder Kinder existieren, so dass Sie bis zum Ende des Arrays/Objekts schleifen, unabhängig von der Tiefe.

+0

Haben Sie zufällig Beispiele? – Detuned

Verwandte Themen