как получить условное подменю с помощью ng-repeat и ui-router в angular?

#angularjs #angular-ui-router

#angularjs #angular-ui-router

Вопрос:

Я пытаюсь создать меню, в котором только некоторые пункты меню будут иметь подменю. Я использую ng-repeat и ui-router. Например, это сокращенный набор пунктов главного меню:

     vm.routes = [
        { name: 'Home', path: 'home' },
        { name: 'Streams', path: 'streams' },
        { name: 'Overlays', path: 'overlays' },
        { name: 'Admin', path: 'admin' }
    ];
 

В HTML я использую это:

     <li class="vic-menu-item" 
        ng-repeat="route in vm.routes" 
        <a ui-sref="{{route.path}}">{{route.name}}</a>
    </li>
 

Теперь я хочу добавить подменю в меню администратора. Но другие пункты меню могут не иметь подменю, например, Home. Таким образом, его включение должно быть обусловлено некоторым свойством в моем массиве vm.routes.

Вопрос: используя угловой способ, как мне использовать условные обозначения в ng-repeat, чтобы я мог создать тег ul меню с дополнительными пунктами подменю?

Я рассмотрел некоторые из подобных вопросов, но они сбивают меня с толку, и ни один из них, похоже, не отвечает на этот конкретный метод.

Спасибо, -Андрес

Ответ №1:

Прежде всего, вы должны создать массив с одинаковой структурой

 vm.routes = [
        { name: 'Home', path: 'home', submenu:[
         {name: 'Submenu-1', path: ''},
         {name: 'Submenu-2', path: ''}
        ] },
        { name: 'Streams', path: 'streams' },
        { name: 'Overlays', path: 'overlays' },
        { name: 'Admin', path: 'admin' }
    ];
 

После этого в html:

 <li class="vic-menu-item" 
    ng-repeat="route in vm.routes" 
    <a ui-sref="{{route.path}}">{{route.name}}</a>
    <ul ng-if='route.submenu'>
      <li ng-repeat='submenu in route.submenu'>
         <a ui-sref="{{submenu.path}}">{{submenu.name}}</a>
      </li>
    </ul>
</li>
 

Комментарии:

1. это сделало это … очень просто. Спасибо за вашу помощь.