Angular17单个组件实现无限层级菜单遍历 ng-zorro antd

// service/MenuService.ts
import {Menu} from "../components/layout/layout.types";

@Injectable({
  providedIn: 'root',
})
export class MenuService {
  // 菜单数据 这里写死数据只作演示
  public data: Menu[] = [
    {
      id: 1,
      title: "菜单管理",
      href: "/admin"
    },
    {
      id: 2,
      title: "子菜单",
      children: [
        {
          id: 3,
          title: "还是菜单管理",
          children: [
            {
              id: 4,
              title: "子子菜单",
              href: "/admin/menu"
            }
          ]
        }
      ]
    }
  ]
  
 }

// left-nav/left-nav.component.ts
import {Component, Input} from '@angular/core';
import { CommonModule } from '@angular/common';
import {Menu} from "../layout/layout.types";
import {NzMenuModule} from "ng-zorro-antd/menu";
import {RouterLink} from "@angular/router";
import {MenuService} from "../../shared/service/menu.service";

@Component({
  selector: 'app-left-nav',
  standalone: true,
  imports: [CommonModule, NzMenuModule, RouterLink],
  templateUrl: './left-nav.component.html',
  styleUrls: ['./left-nav.component.scss'],
})
export class LeftNavComponent {
  @Input() menus: Menu[] = []
  @Input() deep: number = 0

  constructor(
    public menuService: MenuService
  ) {
  }
}
<!--left-nav/left-nav.component.html-->
@if (deep === 0) {
  <app-left-nav [deep]="deep + 1" [menus]="menuService.data"></app-left-nav>
} @else {
  @for (menu of menus; track menu.id) {
    @if (menu.children?.length) {
      <li nz-submenu [nzTitle]="menu.title">
        <ul>
          <app-left-nav [menus]="menu.children!" [deep]="deep + 1"></app-left-nav>
        </ul>
      </li>
    } @else {
      <li nz-menu-item>
        @if (menu.href) {
          <a [routerLink]="menu.href">{{menu.title}}{{menu.href}}</a>
        } @else {
          {{menu.title}}
        }
      </li>
    }
  }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值