Ich versuche, von einer untergeordneten Route zur nächsten zu navigieren, aber ich bekomme ständig Route not found
. Meine primäre Frage: Wie navigiere ich zwischen untergeordneten Ansichten?Aurelia: Wie navigiere ich zwischen untergeordneten Routen?
Unten ist der Code, und ich werde auch weitere Fragen haben.
App Mode-View App Klasse:
export class App {
configureRouter(config, router) {
config.title = 'My Site';
config.map([
{ route: ['','job-view'], name: 'jobView', moduleId: './job-view', nav: true, title:'Jobs'},
{ route: ['services'], name: 'services', moduleId: './services', nav: true, title:'Services'}
]);
this.router = router;
this.router.refreshNavigation();
}
}
Q.2: Warum brauchen wir router
hier zu sparen, wenn es von aurelia-router
immer zugänglich ist?
App Seite:
<template>
<require from='./nav-bar'></require>
<nav-bar router.bind="router"></nav-bar>
<div class="container">
<router-view></router-view>
</div>
</template>
Ok, also jetzt, dass wir unsere Stammseite Ansicht und nav definiert haben, lassen Sie uns die job-view
MV definieren.
Jobview Klasse:
export class JobView {
configureRouter(config, router) {
config.map([
{ route: ['','jobs'], name: 'jobs', moduleId: './jobs', nav: false, title:'Jobs', settings:{icon:'glyphicon glyphicon-align-justify'} },
{ route: ['job/:id'], name: 'job', moduleId: './job', nav: false, title:'Job Details'}
]);
this.router = router; //WHY SAVE THIS?
this.router.refreshNavigation();
}
}
Jobview Seite:
<template>
<router-view></router-view>
</template>
Nun, hier ist der Kinderblick. Meine Annahme, dass das Routing, das auftritt, sollte relativ zu job-view
sein. Das ist, was ich will, im Idealfall.
Jobs Klasse(eine Reihe von Code aus Gründen der Kürze entfernt):
import {Router} from 'aurelia-router';
@inject(Router)
export class Jobs {
constructor(router) {
this.router = router;
}
toJob(id) {
// this.router.navigateToRoute("job", {id:id}); // ERROR - ROUTE NOT FOUND
this.router.navigate("#/job-view/job/".concat(id)); // THIS WORKS
}
}
Q.3: Ich habe beide gesehen router.navigateToRoute
und router.navigate
verwiesen, aber keine Anzeige, wenn entweder verwenden oder was ist der Unterschied, und das Dokument nicht zu erklären. Welches sollte verwendet werden? Docs
Jobs Seite: zum jobs.html
sind irrelevant, so sie hier nicht aufgeführt sind.
Schließlich ist die job
Ansicht:
Jobklasse: Nichts relevant für job.js
, also nicht Codeliste. Am besten kann ich die Navigation zurück zu jobs
durchführen, aber das wird unten auf der Seite behandelt.
Job Seite:
<!-- a bunch of html //-->
<!-- HOW TO USE ROUTER IN HTML, NOT BELOW URL HREF? //-->
<a href="#/jobs">Print Jobs</a>
<!-- a bunch of html //-->
Q.4: Auch hier würde ich auf eine relative Routing wie auch in der HTML-Seite. Das obige funktioniert nicht, also was soll ich verwenden?
Es gab eine proposed answer in einer ähnlichen Frage, aber job-view
in job
und unter Verwendung job-view
gespeicherte Router funktioniert auch nicht.
Übrigens, wenn ich manuell zu http://localhost:3000/#/job-view/job/3
navigiere die Seite lädt gut, so ist es etwas mit dem Router klar.
Hinweis zum Mod: Eine ähnliche Frage wurde bei How to access child router in Aurelia? gestellt, aber es wurde nicht mit einer Lösung beantwortet, die funktioniert.
Das 'route-href' ist nicht etwas, was ich vorher gesehen habe. Interessant. Gibt es Unterlagen dafür? Ich werde es versuchen, wenn ich eine Chance habe. Das Problem, das ich hatte, war mit meinem Aufruf 'this.router.navigateToRoute (" job ", {id: id});'. Ich werde die Frage aktualisieren, um das zu berücksichtigen. –
Entschuldigung für die große Verzögerung, die zu Ihnen zurückkommt. Die route-href ist im Cheatsheet unter "Generating Route URLs" http://aurelia.io/docs.html#/aurelia/framework/1.0.0-beta.1.1.2/doc/article/cheat-sheet – Brandon
Does 'this.router.navigateToRoute ('workDetail', {slug: 'slug'});' (oder sollte 'this.router.navigate (' workDetail ', {slug:' slug '}); ') funktionieren 'workDetail.js' (unter der Annahme, dass" configureRouter "in der Klasse" workDetail "' router' erfasst)? –