我觉得好像有类似的问题已经被问到,但我一直无法找到我的答案。Aurelia儿童路由如何使用参数工作?
我想通过它的功能来隔离我的应用程序。理想情况下,每个功能都可以设置自己的路由,而Aurelia的子路由功能似乎是最合适的,但我无法使其工作。
应用程序的结构是这样:
app.ts
app.html
/lectures
list.ts
list.html
details.ts
details.html
index.ts
index.html
如果需要的话来回答这个问题,而是试图保持的问题尽可能紧凑,我可以包括任何其他文件。 app.html
和lectures/index.html
文件都只包含<template><router-outlet></router-outlet></template>
。
我有app.ts
:
import { Router, RouterConfiguration } from 'aurelia-router';
export class App {
configureRouter(config: RouterConfiguration, router: Router) {
config.options.pushState = true;
config.map([
{
moduleId: './public-site/lectures',
name: 'lectures',
nav: true,
route: ['', 'lectures/:id?'],
title: 'Lectures'
}
]);
}
}
lecture/index.ts
import { Router, RouterConfiguration } from 'aurelia-router';
export class Index {
configureRouter(config: RouterConfiguration, router: Router) {
config.options.pushState = true;
config.map([
{ route: '', moduleId: './list' },
{ route: ':id', moduleId: './details' }
]);
}
}
,然后我有lectures/details.ts
import { NavigationInstruction, RouteConfig, RoutableComponentActivate } from 'aurelia-router';
export class LectureDetails implements RoutableComponentActivate {
activate(params: any, routeConfig: RouteConfig, navigationInstruction: NavigationInstruction): Promise<any> {
debugger;
}
}
和lecture\list.html
<template>
<div repeat.for="lecture of lectures" class="grid-body-cell" click.delegate="navigateToLecture(lecture)">
${lecture.title}
</div>
</template>
lecture\list.ts
import { autoinject } from 'aurelia-framework';
import { Router } from 'aurelia-router';
@autoinject()
export class LecturesList {
constructor(private router: Router) {}
navigateToLecture(lecture: {id:number}) {
this.router.navigate(`#/lectures/${lecture.id}`);
}
}
当应用程序加载时,它正确地导航并显示在列表页面,但是当我点击任何讲座在网格中,URL更新/讲座/ 1,但我的调试器语句永远不会被击中。我无法弄清楚我做错了什么。
似乎正在发生的事情是,当url被更新时,路由器仍然将应用程序指向列表组件。有没有办法让路由器承诺并将参数传递给子路由器?
如何更新我的设置以使子路由器使用参数?
谢谢,我会试试看。我终于在昨晚得到了它的工作,并将其作为答案发布。如果你有时间,如果你也可以告诉我为什么我的方法不好,我会喜欢它。我试图避免命名路线,因为我的假设是他们必须是独一无二的,我不想担心冲突。我来自Angular,起初对Aurelia非常满意,但也有一些这样的事情让我重新考虑。 – peinearydevelopment
命名路线不是要求,只是一个建议和我个人做的事情。我遵循一个命名模式,在路由名称前加上视图模型的名称以防止冲突。不要放弃,一旦一切开始点击,并且你知道事情是如何拼凑在一起的,你很快就会看到你做出了正确的选择切换到Aurelia。如果你需要帮助,那么肯定也要停止公开Gitter频道(核心团队成员在那里闲逛并偶尔回答问题)。 –
谢谢。我一定会给Gitter频道看一看。 Aurelia看起来很优雅,但我迄今发现的是,它的价格很高。事情并不总是直观,文档缺乏。无论我在那里想做什么,我都能够找到如何做到相对容易,而且经常笨重,这是可行的。我已经发布了对我有用的东西,如果您有时间并且可以对此发表评论,我将不胜感激。谢谢! – peinearydevelopment