我有一个menuItems和可能的子菜单列表,这些子菜单是通过服务从json加载的。在路由更改时,将完成父菜单的查找以打开正确的menuItem。我使用一个可观察的menuItem列表来做到这一点。
MenuItem类如下:
export class MenuItem {
code: string;
name: string;
routerLink: boolean;
submenu: boolean;
url: string;
submenuItems: SubMenuItem[];
}
子菜单如下:
export class SubMenuItem {
name: string;
url: string;
routerLink: boolean;
}
要查找正确的menuItem,请使用以下方法:
private findParentMenuToExpand(url:String): Observable<MenuItem> {
console.log("inside findParentMenuToExpand");
return this.menuItems$
.find((menuItem: MenuItem) => {
if (menuItem.submenu === true) {
for (let subMenuItem of menuItem.submenuItems) {
if (subMenuItem.url === url) {
return true;
}
}
}
});
}
该方法的调用如下:
if(this.selectedSubMenuUrl != null) {
var parentMenuItem: Observable<MenuItem> = this.findParentMenuToExpand(this.selectedSubMenuUrl);
parentMenuItem.subscribe((menuItem: MenuItem) => console.log(menuItem));
}
然而,订阅方法中的menuItem总是未定义的。
关于我做错了什么的线索?
答案 0 :(得分:0)
这种情况正在发生,因为您的代码没有到达return语句。
我建议调试menuItems$
发出的值,看看find
运算符是否应该发出一些东西。
return this.menuItems$
.do((v) => {
console.log(v.submenu, v.submenuItems);
})
.find((menuItem: MenuItem) => {
if (menuItem.submenu === true) {
for (let subMenuItem of menuItem.submenuItems) {
if (subMenuItem.url === url) {
return true;
}
}
}
});
}