Ich wollte einen Autorisierungsschritt in meinem Router implementieren und so nutzte ich das Typoskript-Beispiel in einem Aurelia docs fast verbatum.Aurelia - Das Einrichten der Basis-Autorisierungs-Pipeline führt dazu, dass Navigations-Links verschwinden
Meine Navbar funktioniert jetzt nicht und ich weiß nicht warum?
So stelle ich den Router ein.
import { Aurelia, PLATFORM } from 'aurelia-framework';
import { Redirect, NavigationInstruction, RouterConfiguration, Next } from 'aurelia-router';
export class App {
configureRouter(config: RouterConfiguration): void {
config.title = 'Aurelia';
config.addAuthorizeStep(AuthorizeStep);
config.map([{
route: ['', 'home'],
name: 'home',
settings: { icon: 'home' },
moduleId: PLATFORM.moduleName('../website/home/home'),
nav: true,
title: 'Home'
}, {
route: 'counter',
name: 'counter',
settings: { icon: 'education' },
moduleId: PLATFORM.moduleName('../website/counter/counter'),
nav: true,
title: 'Counter'
}, {
route: 'fetch-data',
name: 'fetchdata',
settings: { icon: 'th-list' },
moduleId: PLATFORM.moduleName('../website/fetchdata/fetchdata'),
nav: true,
title: 'Fetch data'
}, {
route: 'login',
name: 'login',
settings: { icon: 'user' },
moduleId: PLATFORM.moduleName('../components/auth/login/login'),
nav: true,
title: 'Login'
},
]);
}
}
class AuthorizeStep {
run(navigationInstruction: NavigationInstruction, next: Next): Promise<any> {
if (navigationInstruction.getAllInstructions().some(i => i.config.settings.auth)) {
var isLoggedIn = true;
console.log('It got here!');
if (!isLoggedIn) {
return next.cancel(new Redirect('login'));
}
}
return next();
}
}
Dies ist, wie sie umgesetzt werden, verwenden, um ..
import { Aurelia, PLATFORM } from 'aurelia-framework';
import { Router, RouterConfiguration, NavigationInstruction, Redirect, Next } from 'aurelia-router';
export class App {
router: Router;
configureRouter(config: RouterConfiguration, router: Router) {
config.title = 'Aurelia';
config.addAuthorizeStep(AuthorizeStep);
config.map([{
route: [ '', 'home' ],
name: 'home',
settings: { icon: 'home' },
moduleId: PLATFORM.moduleName('../website/home/home'),
nav: true,
title: 'Home'
}, {
route: 'counter',
name: 'counter',
settings: { icon: 'education' },
moduleId: PLATFORM.moduleName('../website/counter/counter'),
nav: true,
title: 'Counter'
}, {
route: 'fetch-data',
name: 'fetchdata',
settings: { icon: 'th-list' },
moduleId: PLATFORM.moduleName('../website/fetchdata/fetchdata'),
nav: true,
title: 'Fetch data'
}, {
route: 'login',
name: 'login',
settings: { icon: 'user' },
moduleId: PLATFORM.moduleName('../components/auth/login/login'),
nav: true,
title: 'Login'
},
]);
this.router = router;
}
}
..und hier ist, wie mein navmenu.html impmlemented ist ..
<template bindable="router">
<require from="./navmenu.css"></require>
<div class="main-nav">
<div class="navbar navbar-inverse">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#/home">Jobsledger.API</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li repeat.for = "row of router.navigation" class="${ row.isActive ? 'link-active' : '' }" >
<a href.bind = "row.href">
<span class="glyphicon glyphicon-${ row.settings.icon }"></span> ${ row.title }
</a>
</li>
</ul>
</div>
</div>
</div>
</template>
ich denke, es könnte etwas mit der Tatsache zu tun, dass das Beispiel aus der Aurelia-Dokumentation sich nicht auf Router irgendwo bezieht. Wie kann ich das Dokumentationsbeispiel ändern, so dass der Router mit dem Navmenue funktioniert und der Autorisierungsschritt funktioniert?
Das hat den Trick gemacht. Ich erkannte auch, dass ich den Wert "auth" zu den Einstellungen hinzufügen musste, damit dies funktioniert. "Auth: true" hinzugefügt bedeutet, dass für die Route isLoggedIn auf "true" gesetzt sein muss, damit die Route verfügbar ist, um sie direkt anzusprechen. – si2030