2017-01-26 14 views
0

jsonからサービス経由でロードされるmenuItemsとsubmenuItemsのリストがあります。ルートの変更時に、正しいmenuItemを開くために親メニューのルックアップが行われます。これは、ObservableのmenuItemのリストを使用して行います。次のようにObservable findメソッドが動作しない

MenuItemクラスは、次のよう

export class MenuItem { 
    code: string; 
    name: string; 
    routerLink: boolean; 
    submenu: boolean; 
    url: string; 
    submenuItems: SubMenuItem[]; 
} 

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

subscribeメソッドのmenuItemは常に未定義です。

私が間違っていることに関する手掛かりはありますか?

+1

'find'を削除するとどうなりますか?正しくメニュー項目を記録しますか? – olsn

+0

はい、menuItemが正しく挿入されています – Ronny176

答えて

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; 
     } 
     } 
    } 
    }); 
} 
関連する問題