Bootstrap 4 手风琴导航 angular 4

Bootstrap 4 accordion for navigation in angular 4

我想在 Angular 中用 json 对象创建嵌套菜单 4. 我写了下面的代码。

<div id="panel-group">
  <div class="panel panel-default" *ngFor="let mainItem of objectKeys(my_menu); let i = index">
    <div class="panel-heading" (click) = "current = i">
      <h5 class="panel-title">{{ mainItem }}</h5>
    </div>
     <div id="collapse1" class="panel-collapse" [class.collapse]='current != i'>
      <div class="panel-body">
        <ul>
          <li *ngFor="let subItem of my_menu[mainItem]"><a href="#">{{ subItem }}</a></li>
        </ul>
      </div>
    </div>
  </div>
</div>

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';
  current: number = 0;
  items: Array<any>;

  objectKeys = Object.keys;
   my_menu = {
    'Menu 1': ['Sub Menu 1', 'Sub Menu 2'],
    'Menu 2': ['Sub Menu 1', 'Sub Menu 2', 'Sub Menu 3'],
    'Menu 3': []
  };
}

这是我的工作示例 My example。我现在的问题是如何检查菜单是否有子菜单以及如何添加路由器 link 以及如何检查是否有子菜单。请帮助

错误在行

<div id="collapse1" class="panel-collapse" [class.collapse]='current != i'>

逻辑不正确。但是,如果您删除条件检查 [class.collapse]='current != i' 这将解决您的问题。不需要其他任何东西。

根据我们的需要重新组织对象并实现即可。

my_menu = [
    {menu:[{main:'Menu 1', submenu: [{sub:'Sub Menu 1', route:'/home1'}, {sub:'Sub Menu 2', route:'/home2'}]}]},
    {menu:[{main:'Menu 2', submenu: [{sub:'Sub Menu 1', route:'/about'}, {sub:'Sub Menu 2', route:'about1'}, {sub:'Sub Menu 3',route:'about2'}]}]},
    {menu:[{main:'Menu 3', submenu:[]}]}
  ];

参考DEMO