now is active based on router functionality rather than on location/urls

This commit is contained in:
nixa 2016-04-28 15:08:48 +03:00
parent dd6c7644f6
commit fbdf4355dd
4 changed files with 24 additions and 22 deletions

View file

@ -12,6 +12,7 @@ require("!style!css!sass!./theme/sass/_ionicons.scss");
/* /*
* App Component * App Component
* Top Level Component * Top Level Component
* TODO: whey the header and footer are not implemented?
*/ */
@Component({ @Component({
selector: 'app', selector: 'app',
@ -34,7 +35,7 @@ require("!style!css!sass!./theme/sass/_ionicons.scss");
}) })
@RouteConfig([ @RouteConfig([
{ {
path: '/...', path: '/pages/...',
name: 'Pages', name: 'Pages',
component: Pages, component: Pages,
useAsDefault: true useAsDefault: true

View file

@ -1,7 +1,7 @@
import {Component, ElementRef} from 'angular2/core'; import {Component, ElementRef} from 'angular2/core';
import {SidebarService} from './sidebar.service'; import {SidebarService} from './sidebar.service';
import {Location} from 'angular2/router'; import {Router} from 'angular2/router';
@Component({ @Component({
selector: 'sidebar', selector: 'sidebar',
@ -13,17 +13,19 @@ import {Location} from 'angular2/router';
}) })
export class Sidebar { export class Sidebar {
elementRef: ElementRef; elementRef: ElementRef;
location: Location; router: Router;
menuItems: Array<any>; menuItems: Array<any>;
menuHeight: number; menuHeight: number;
isMenuCollapsed: boolean; isMenuCollapsed: boolean;
constructor(el: ElementRef, location: Location, private _sidebarService: SidebarService) { constructor(el: ElementRef, router: Router, private _sidebarService: SidebarService) {
this.elementRef = el; this.elementRef = el;
this.location = location; this.router = router;
this.menuItems = this._sidebarService.getMenuItems(); this.menuItems = this._sidebarService.getMenuItems();
}
ngOnInit() {
this.selectMenuItem(); this.selectMenuItem();
} }
@ -63,17 +65,21 @@ export class Sidebar {
return false; return false;
} }
private isActive(instruction: any[]): boolean {
return ;
}
private selectMenuItem() { private selectMenuItem() {
let currentPath = this.location.path(); let isCurrent = (instruction) => (this.router.isRouteActive(this.router.generate([instruction])));
let isCurrent = (root) => (('#' + currentPath).indexOf(root) == 0);
this.menuItems.forEach(function (menu) { this.menuItems.forEach(function (menu) {
menu.selected = isCurrent(menu.root);
menu.selected = isCurrent(menu.name);
menu.expanded = menu.expanded || menu.selected; menu.expanded = menu.expanded || menu.selected;
console.log(menu);
if (menu.subMenu) { if (menu.subMenu) {
menu.subMenu.forEach(function (subMenu) { menu.subMenu.forEach(function (subMenu) {
subMenu.selected = isCurrent(subMenu.root) && !subMenu.disabled; subMenu.selected = isCurrent(subMenu.name) && !subMenu.disabled;
}); });
} }
}); });

View file

@ -3,7 +3,7 @@
<li *ngFor="#item of menuItems" class="al-sidebar-list-item" <li *ngFor="#item of menuItems" class="al-sidebar-list-item"
[ngClass]="{'selected': item.selected, 'with-sub-menu': item.subMenu}"> [ngClass]="{'selected': item.selected, 'with-sub-menu': item.subMenu}">
<a *ngIf="!item.subMenu" href="{{ item.root }}" class="al-sidebar-list-link"> <a *ngIf="!item.subMenu" [routerLink]="[item.name]" class="al-sidebar-list-link">
<i class="{{ item.icon }}"></i><span>{{ item.title }}</span> <i class="{{ item.icon }}"></i><span>{{ item.title }}</span>
</a> </a>

View file

@ -12,21 +12,21 @@ export class SidebarService {
subMenu: [ subMenu: [
{ {
title: 'Sign In', title: 'Sign In',
root: 'auth.html', // name: 'SignIn',
blank: true blank: true
}, },
{ {
title: 'Sign Up', title: 'Sign Up',
root: 'reg.html', // name: 'SignUp',
blank: true blank: true
}, },
{ {
title: 'User Profile', title: 'User Profile',
root: '#/profile' // name: 'UserProfile'
}, },
{ {
title: '404 Page', title: '404 Page',
root: '404.html', // name: 'NotFound',
blank: true blank: true
} }
] ]
@ -39,14 +39,12 @@ export class SidebarService {
subMenu: [ subMenu: [
{ {
title: 'Menu Level 1.1', title: 'Menu Level 1.1',
root: '#',
disabled: true disabled: true
}, },
{ {
title: 'Menu Level 1.2', title: 'Menu Level 1.2',
subMenu: [{ subMenu: [{
title: 'Menu Level 1.2.1', title: 'Menu Level 1.2.1',
root: '#',
disabled: true disabled: true
}] }]
} }
@ -73,12 +71,10 @@ export class SidebarService {
// TODO mock state object // TODO mock state object
var state = [{ var state = [{
name: 'dashboard', name: 'Dashboard',
title: 'Dashboard', title: 'Dashboard',
selected: false, selected: false,
expanded: false, expanded: false,
url: '/pages/dashboard',
templateUrl: 'app/pages/dashboard/dashboard.html',
sidebarMeta: { sidebarMeta: {
icon: 'ion-android-home', icon: 'ion-android-home',
order: 0, order: 0,
@ -96,8 +92,7 @@ export class SidebarService {
title: s.title, title: s.title,
level: (s.name.match(/\./g) || []).length, level: (s.name.match(/\./g) || []).length,
order: meta.order, order: meta.order,
icon: meta.icon, icon: meta.icon
root: '#/' + s.name.replace('.', '/'),
}; };
}) })
.sort(function(a, b) { .sort(function(a, b) {