angular - 使用 Angular 8 和 Metismenu 从 BE 加载数据的动态菜单
问题描述
我正在尝试将使用 Thymeleaf 的项目迁移到 Angular 8。菜单是使用 MetisMenu 从 BE(rest api)加载数据来实现的。
问题
问题是重新加载页面或任何导航后菜单变得无响应。
编码
main-menu.component.html
<div id="navigation">
<ul class="nav" id="side-menu">
<li *ngFor="let item of menu?.items">
<a href='{{item.href}}'>
<i class="{{item.icon}}"></i>
<span>{{item.text}}</span>
<span *ngIf="item?.subitems.length > 0" class="fa arrow"></span>
</a>
<ul *ngIf="item?.subitems.length > 0" id="{{item.code}}" class="nav nav-second-level collapse">
<li class="nav nav-second-level" *ngFor="let subitem of item?.subitems">
<a href="{{subitem.href}}">{{subitem.text}}</a>
</li>
</ul>
</li>
</ul>
</div>
主菜单.component.ts
import { Component, OnInit } from '@angular/core';
import { MenuModel } from './menu-model';
import { MenuDataProviderService } from './menu-data-provider.service';
@Component({
selector: 'app-main-menu',
templateUrl: './main-menu.component.html',
styleUrls: ['./main-menu.component.css']
})
export class MainMenuComponent implements OnInit {
constructor(private menuService : MenuDataProviderService) {
}
menu: MenuModel;
ngOnInit(): void {
this.menuService.getMenu('MAIN', 'admin').subscribe(data => this.menu = data);
}
}
MetisMenu 就是这样初始化的
if (document.getElementById('side-menu') != null) {
$('#side-menu').metisMenu();
}
在已添加到角度配置的通用脚本中。
"scripts": [
"./node_modules/jquery/dist/jquery.js",
"./node_modules/bootstrap/dist/js/bootstrap.js",
"./node_modules/metismenu/dist/metismenu.js",
"src/app-script.js" //general app script
]
},
调试应用程序,看到调用metisMenu初始化时,菜单没有子菜单(数据尚未加载)。
我尝试使用角度生命周期挂钩(AfterViewInit 和 AfterContentInit)将 metisMenu 初始化移动到组件 ts 文件,但没有任何效果。
我想知道是否有任何方法可以监听数据订阅以便在准备好时触发菜单初始化。
解决方案
推荐阅读
- django - Django 中的 UnboundLocalError 和 TypeError
- php - 如何计算裁剪图像的位置 - imagecopyresampled
- java - vaadin FileDownloader 重置扩展
- java - Java:在保持顺序的同时并行过滤大型文本文件
- html - 变换比例并调整外部内容
- python - Python goslate 可能的防火墙问题
- jquery - 在 document.ready 上触发一个 jQuery 函数
- javascript - 突出显示文本的文本到语音
- sql-server - SQL Server - 将逻辑表达式的结果转换为 BIT/INT
- arrays - 在 PHP 中显示 JSON 天气 API 响应