Как создать рекурсивное меню в angular

#angular #typescript

#angular #typescript

Вопрос:

У меня есть следующий html, который соответствует боковой панели панели навигации в html.

Я попробовал следующий учебник, но не смог найти нужную идею:

https://www.ozkary.com/2017/06/angular2-navigation-menu-with-recursive.html

 <div class="wrapper">
    <!-- Sidebar -->
    <nav id="sidebar">
        <div class="sidebar-header">
            <img src="assets/images/test_img.png" >   
            <p>Lucia Pérez</p>
            <p>Admin</p>
        </div>

        <ul class="seccion-menu-dropdown">
            <li class="active">
                <span class="material-icons"> account_box</span> <a href="#asivamos" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle">Así Vamos</a>
                <ul class="collapse list-unstyled" id="asivamos">
                    <li>
                        <a href="#">asivamos 1</a>
                    </li>
                    <li>
                        <a href="#">asivamos 2</a>
                    </li>
                    <li>
                        <a href="#">asivamos 3</a>
                    </li>
                </ul>
            </li>
            <li>
                <span class="material-icons"> account_box</span><a href="#pacientes" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle">Pacientes</a>
                <ul class="collapse list-unstyled" id="pacientes">
                    <li>
                        <a href="#">pacientes 1</a>
                    </li>
                    <li>
                        <a href="#">pacientes 2</a>
                    </li>
                    <li>
                        <a href="#">pacientes 3</a>
                    </li>
                </ul>
            </li>
            <li>
                <span class="material-icons"> account_box</span><a href="#escalas" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle">Escalas</a>
                <ul class="collapse list-unstyled" id="escalas">
                    <li>
                        <a href="#">Escalas 1</a>
                    </li>
                    <li>
                        <a href="#">Escalas 2</a>
                    </li>
                    <li>
                        <a href="#">Escalas 3</a>
                    </li>
                </ul>
            </li>
            <li>
                <span class="material-icons"> account_box</span><a href="#tromboprofilaxis" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle">Trombo<br/>Efectiva</a>
                <ul class="collapse list-unstyled" id="tromboprofilaxis">
                    <li>
                        <a href="#">tromboprofilaxis 1</a>
                    </li>
                    <li>
                        <a href="#">tromboprofilaxis 2</a>
                    </li>
                    <li>
                        <a href="#">tromboprofilaxis 3</a>
                    </li>
                </ul>
            </li>
        </ul>

        <ul class="menu-final">
            <li><span class="material-icons"> account_box</span>Ayuda y Soporte</li>
            <li><span class="material-icons"> account_box</span>Cerrar Sesión</li>
            <li><span class="material-icons"> account_box</span>Terminos Legales</li>
        </ul>
    </nav>

</div>

  

Но я хотел бы знать, как превратить его в рекурсивное меню, но я не очень хорошо понимаю идею рекурсии и как это сделать в этом аспекте

Ответ №1:

Ваша опубликованная ссылка на учебник хорошо описывает, как вы можете достичь цели рекурсивной структуры для вашего случая.

Рекурсия создается с помощью вложенного объекта ‘IMenu’, который содержит все необходимые пункты меню.

Для отображения рекурсивного объекта компонент использует ng-шаблон для каждого отдельного пункта меню. Для отображения подпунктов шаблон имеет вложенный ng-контейнер, который также использует ng-template. С помощью этого вы можете вложить свою компонентную структуру.

Таким образом, вы можете управлять своей структурой, определяя IMenu-объект в ts-файле компонента.