Jestem bardzo nowy w Angular. Mam trochę pracy nad Angularem.
Muszę powiązać zagnieżdżoną listę rozwijaną dla Json
danych pochodzących z serwera, wywołując Rest Api.
Dane mają jeden atrybut LgLevel
, określa poziom w hierarchii grupy. Rodzic będzie musiał level=0
, natychmiastowa Child=1
, Grandchild=2
i tak dalej. Child
i Grandchild
ma ParentLocationGroup
pole, które pokazuje, w którym menu nadrzędnym będzie menu podrzędne.
To są moje json
dane. Mam ogromne dane, ale nie pokazuję wszystkich.
{
"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"
}
}
Próbowałem go opracować, ale znalazłem wszystkie przykłady bootstrap
z danymi statycznymi w html
pliku i osobnym CSS
pliku, co było dla mnie skomplikowane.
Chcę to zrobić dynamicznie, używając TypeScript
. Jak mogę zacząć nad tym pracować.
html
angular
typescript
Arvind Chourasiya
źródło
źródło
XML
i nieJSON
. Czy możesz również dodać cokolwiek, co próbowałeś? Może bardziej szczegółowo przyjęte podejście.html
kodu, który ma statycznie zagnieżdżone listy. Spróbuję go edytować i opublikujęJson
dane. Nie spodoba ci się to, co próbowałem :)html
pliku. Mam pomysł, aby go uruchomić. Możesz mi pomócOdpowiedzi:
Jest to próbka zakodowana, której potrzebujesz według danych na poziomie zagnieżdżonym z danych JSON. Teraz możesz zapętlić sformatowane dane JSON w DOM przy użyciu danych modelu . Mam nadzieję, że pomoże ci to stworzyć menu rozwijane na wielu poziomach
Plik HTML
Zgodnie z danymi odpowiedzi serwera uporządkuj dane modelu. Zmieniono format odpowiedzi Json ( __text na #text )
źródło
getData
Nigdzie nie korzystasz . Czy możesz sprawdzić swój kod jeden i dodać otwieranie i zamykanie.Wygląda na to, że masz już inną odpowiedź, która spełnia Twoje wymagania. Ale to rozwiązanie zajęło mi trochę czasu. W każdym razie postanowiłem to opublikować.
Poniższy fragment kodu służy do budowy drzewiastej struktury hierarchicznych danych rodzic-dziecko:
Zagregowane dane są przekazywane jako dane wejściowe do
dropdown
komponentu, który czyni je wielopoziomowym menu rozwijanym.To rozwiązanie powinno działać na każdym poziomie dzieci.
dropdown
Komponent może być modyfikowany, aby zmienić sposób, w jaki dane są renderowane jak na swoje wymagania.Wziąłem
html
icss
dla wielopoziomowego menu rozwijanego stąd:https://phppot.com/css/multilevel-dropdown-menu-with-pure-css/
kod, aby zamknąć menu rozwijanym po kliknięciu na zewnątrz od tej odpowiedzi:
https: //stackoverflow.com/a/59234391/9262488
Mam nadzieję, że to było przydatne.
źródło
Dlaczego nie utworzyć komponentu drzewa i powiązać z nim rekurencyjnie dane wejściowe?
Proponowane rozwiązanie to
O(n)
.Najpierw zaprojektuj model danych - musi to być struktura węzła drzewa:
Następnie agreguj swoje dane w komponencie najwyższego poziomu (lub jeszcze lepiej - w usłudze danych; powinieneś być w stanie wystarczająco łatwo streścić):
I utwórz powtarzalny dynamiczny komponent wysuwany:
Rozwiązanie nie zostało przetestowane, ale skieruje cię w dobrym kierunku ...
Mam nadzieję, że to trochę pomoże :-)
źródło