我覺得好像有類似的問題已經被問到,但我一直無法找到我的答案。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