Ich bin sehr neu in Angular. Ich habe einige Arbeiten an Angular.
Ich muss die verschachtelte Dropdown-Liste für Json
Daten, die vom Server kommen, durch Aufrufen von Rest Api binden .
Daten haben ein Attribut LgLevel
: Gibt die Ebene in der Hierarchie der Gruppe an. Elternteil hat level=0
, Immediate Child=1
, Grandchild=2
und so weiter. Child
und Grandchild
hat ein ParentLocationGroup
Feld, das anzeigt, in welchem übergeordneten Menü sich das untergeordnete Menü befindet.
Das sind meine json
Daten. Ich habe riesige Daten, aber nicht alle.
{
"ArrayOfLocationGroup": {
"LocationGroup": [
{
"Id": "628",
"Name": "TEST1",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources"
},
"ParentLocationGroup": {
"_uuid": "bdce4396-9c60-4831-90f2-6f793becb362",
"__text": "570"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "0"
}
},
{
"Id": "630",
"Name": "TEST2",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "PAM-TEST"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
},
{
"Id": "631",
"Name": "TEST3",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "PAA-TEST"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
},
{
"Id": "697",
"Name": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "TEST4"
},
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "PAE-TEST"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
},
{
"Id": "700",
"Name": "TEST5",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "cuba"
},
"ParentLocationGroup": {
"_uuid": "704af4cf-9feb-4f1b-aa00-d1c7926f7901",
"__text": "694"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "2"
}
},
{
"Id": "706",
"Name": "TEST5",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "VOIP-Test"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
},
{
"Id": "718",
"Name": "TEST7",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
},
{
"Id": "719",
"Name": "TEST8",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "MEM_RS"
},
"ParentLocationGroup": {
"_uuid": "52073e2b-48b5-41a9-9c2b-d793835cf285",
"__text": "718"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "2"
}
},
{
"Id": "752",
"Name": "TEST9",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "ELDIT"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
},
{
"Id": "753",
"Name": "TEST10",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "GXYA"
},
"ParentLocationGroup": {
"_uuid": "52073e2b-48b5-41a9-9c2b-d793835cf285",
"__text": "718"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "2"
}
},
{
"Id": "760",
"Name": "TEST11",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "STAGE2"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
},
{
"Id": "761",
"Name": "TEST12",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "INIT"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
},
{
"Id": "762",
"Name": "TEST13",
"GroupId": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "USIT"
},
"ParentLocationGroup": {
"_uuid": "894055b6-b132-4dc2-a12a-971ecc0c7224",
"__text": "628"
},
"LgLevel": {
"_xmlns": "http://www.air-watch.com/servicemodel/resources",
"__text": "1"
}
}
],
"_xmlns:xsd": "http://www.w3.org/2001/XMLSchema"
}
}
Ich habe versucht, es zu entwickeln, aber ich habe alle Beispiele bootstrap
mit statischen Daten in einer html
Datei und einer separaten CSS
Datei gefunden, was für mich kompliziert war.
Ich möchte es dynamisch mit verwenden TypeScript
. Wie kann ich anfangen daran zu arbeiten?
quelle
XML
und nichtJSON
. Können Sie auch hinzufügen, was Sie versucht haben? Vielleicht detaillierter der Ansatz, den Sie gewählt haben.html
Code mit statisch verschachtelten Listen ausprobiert . Ich werde versuchen, es zu bearbeiten undJson
Daten veröffentlichen. Du wirst nicht mögen, was ich versucht habe :)html
Datei. Ich habe eine Idee, es zu starten. Du kannst mir helfen.Antworten:
Dies ist ein codiertes Beispiel, das Sie gemäß den Daten der verschachtelten Ebene aus Ihren JSON-Daten benötigen. Jetzt können Sie die formatierten JSON-Daten im DOM mithilfe von Modelldaten schleifen . Ich hoffe, dies wird Ihnen dabei helfen, ein mehrstufiges Dropdown-Menü zu erstellen
HTML-Datei
Organisieren Sie die Modelldaten gemäß Ihren Serverantwortdaten. Antwort json Format geändert ( __text zu #text )
quelle
getData
nirgendwo. Könnten Sie bitte Ihren Code eins überprüfen und Öffnungen und Verschlüsse hinzufügen.Anscheinend haben Sie bereits eine andere Antwort, die Ihren Anforderungen entspricht. Aber diese Lösung hat mich einige Zeit gekostet. Also habe ich beschlossen, es trotzdem zu posten.
Das folgende Codeausschnitt wird verwendet, um die baumartige Struktur der hierarchischen Eltern-Kind-Daten zu erstellen:
Die aggregierten Daten werden als Eingabe an eine
dropdown
Komponente übergeben, die sie als mehrstufiges Dropdown-Menü darstellt.Diese Lösung funktioniert angeblich für alle Kinder. Die
dropdown
Komponente kann geändert werden, um die Art und Weise zu ändern, in der die Daten gemäß Ihren Anforderungen gerendert werden.Ich habe das
html
undcss
für das mehrstufige Dropdown-Menü von hier genommen:https://phppot.com/css/multilevel-dropdown-menu-with-pure-css/
Der Code zum Schließen des Menü-Dropdowns, wenn außerhalb dieser Antwort geklickt wird:
https: //stackoverflow.com/a/59234391/9262488
Ich hoffe, Sie finden das nützlich.
quelle
Warum nicht eine Baumkomponente erstellen und Eingaben rekursiv daran binden?
Die vorgeschlagene Lösung ist
O(n)
.Entwerfen Sie zuerst das Datenmodell - es muss eine Baumknotenstruktur sein:
Aggregieren Sie dann Ihre Daten in der Komponente der obersten Ebene (oder noch besser - in Ihrem Datendienst; Sie sollten in der Lage sein, dies leicht genug zu abstrahieren):
Und erstellen Sie die wiederkehrende dynamische Flyout-Komponente:
Die Lösung ist nicht getestet, soll aber in die richtige Richtung weisen ...
Hoffe das hilft ein wenig :-)
quelle