Eu sou muito novo no Angular. Eu tenho alguns trabalhos em Angular.
Preciso ligar a lista suspensa Aninhada para Json
dados provenientes do servidor chamando Rest Api.
Os dados têm um atributo LgLevel
, Especifica o nível na hierarquia do grupo. Pai terá level=0
, Imediato Child=1
, Grandchild=2
e assim por diante. Child
e Grandchild
possui ParentLocationGroup
campo, que mostra dentro de qual menu pai, o menu filho estará lá.
Estes são os meus json
dados. Eu tenho dados enormes, mas não estou mostrando tudo.
{
"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"
}
}
Eu tentei desenvolvê-lo, mas encontrei todos os exemplos de bootstrap
dados estáticos no html
arquivo e no arquivo separado, CSS
o que foi complicado para mim.
Eu quero fazer isso dinamicamente usando TypeScript
. Como posso começar a trabalhar nisso?
html
angular
typescript
Arvind Chourasiya
fonte
fonte
XML
e nãoJSON
. Você também pode adicionar o que tentou? Talvez em mais detalhes a abordagem que você adotou.html
código que tem listas aninhadas estáticas. Vou tentar editá-lo e publicareiJson
dados. Você não vai gostar do que tentei :)html
arquivo. Eu tenho idéia para começar. Você pode me ajudar.Respostas:
Esta é uma amostra codificada que você precisa conforme os dados de nível aninhado dos seus dados json. Agora você pode executar o loop dos dados json formatados no DOM usando dados do modelo . Espero que isso ajude você a criar um menu suspenso em vários níveis
Arquivo HTML
Conforme os dados de resposta do servidor, organize os dados do modelo. O formato json da resposta foi alterado ( __text para #text )
fonte
getData
lugar algum. Você poderia, por favor, verificar seu código um e adicionar abertura e fechamento.Parece que você já tem outra resposta que atenda às suas necessidades. Mas essa solução levou algum tempo para ser apresentada. Então decidiu postá-lo de qualquer maneira.
O snippet de código abaixo é usado para construir a estrutura em árvore dos dados hierárquicos pai-filho:
Os dados agregados são passados como entrada para um
dropdown
componente que os processa como um menu suspenso multinível.Esta solução supostamente funcionará para qualquer nível de crianças. O
dropdown
componente pode ser modificado para alterar a maneira como os dados são renderizados conforme seus requisitos.Peguei o
html
ecss
para o menu suspenso multinível aqui:https://phppot.com/css/multilevel-dropdown-menu-with-pure-css/
O código para fechar o menu suspenso quando clicado fora desta resposta:
https: //stackoverflow.com/a/59234391/9262488
Espero que você ache isso útil.
fonte
Por que não criar um componente de árvore e vincular entradas a ele recursivamente?
A solução proposta é
O(n)
.Primeiro, projete o modelo de dados - ele deve ser uma estrutura de nó de árvore:
Agregue seus dados no componente de nível superior (ou melhor ainda - em seu serviço de dados; você poderá abstrair com bastante facilidade):
E crie o componente de submenu dinâmico recorrente:
A solução não foi testada, mas deve direcioná-lo na direção certa ...
Espero que isto ajude um pouco :-)
fonte