ValueConverter. , .
- settings.parentMenu , .
export class App {
configureRouter(config, router) {
config.title = 'Aurelia';
config.map([
{ route: ['', 'welcome'], name: 'welcome', moduleId: 'welcome', nav: true, title: 'Welcome', settings: { icon : 'fa-th-large'} },
{ route: '#', name: 'admin', moduleId: 'admin', nav: true, title: 'Admin', settings: { icon : 'fa-user' } },
{ route: 'admin/templates', name: 'admin-templates', moduleId: 'users/users', nav: true, title: 'Templates', settings: { parentMenu: 'Admin'} }
]);
this.router = router;
}
}
subMenu.js -
export class SubMenuValueConverter {
toView(routerMenuItems) {
var menuItems = [];
routerMenuItems.forEach(function (menutItem) {
if (menutItem.settings.parentMenu) {
var parent = menuItems.find(x => x.title == menutItem.settings.parentMenu);
parent.children.push(menutItem);
} else {
menuItems[menutItem] = menuItems[menutItem] || [];
menutItem.children = [];
menuItems.push(menutItem);
}
});
return menuItems;
}
}
nav-bar.html - . subMenu .
<template bindable="router">
<require from="./subMenu"></require>
<nav role="navigation">
<li repeat.for="row of router.navigation | subMenu" class="${row.isActive ? 'active' : ''}">
<a href="${row.children.length == 0 ? row.href : 'javascript:void(0);'}">
<i class="fa ${row.settings.icon}"></i>
<span class="nav-label">${row.title}</span>
</a>
<ul if.bind="row.children.length > 0" class="nav nav-second-level">
<li repeat.for="sub of row.children" class="${sub.isActive ? 'active' : ''}">
<a href.bind="sub.href">
<i class="fa ${subrow.settings.icon}"></i>
<span class="nav-label">${sub.title}</span>
</a>
</li>
</ul>
</li>
</nav>
</template>
, , "" , . , , app.js( , ), configureRouter . , , .