可观察的查找方法不起作用

时间:2017-01-26 15:00:27

标签: angular typescript rxjs

我有一个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总是未定义的。

关于我做错了什么的线索?

1 个答案:

答案 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;
        }
      }
    }
  });
}