【问题标题】:Observable find method not working可观察的查找方法不起作用
【发布时间】:2017-01-27 15:23:54
【问题描述】:

我有一个菜单项列表和可能的子菜单项,它们是通过服务从 json 加载的。在路线更改时,会查找父菜单以打开正确的 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 始终未定义。

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

【问题讨论】:

  • 当您删除 find 时会发生什么 - 它会正确记录 MenuItems 吗?
  • 是的,menuItems 已正确插入

标签: angular typescript rxjs


【解决方案1】:

这是因为您的代码没有到达 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;
        }
      }
    }
  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2012-06-13
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多