Aurelia:子路由器路由显示在 "main" 导航栏中,子视图显示在 app.html <router-view> 元素中?

Aurelia: child router routes display in "main" nav-bar and child view in app.html <router-view> element?

我们想要一个侧边栏菜单和一个 "main" 区域。根据您的导航方式,侧边栏的菜单项将发生变化,并且新视图将加载到 "main" 区域。

我创建了 app.html,其中包含一个 <router-view> 元素和一个可以显示主路由器导航的 nav-bar.html。假设我最初有 "Administration" 和 "Reports" 作为路线(因此有菜单项)。当用户单击 "Administration" 时,我希望菜单更新以显示子路由(例如 "Users" 和 "Settings")并在 [=63] 中显示管理视图模型=]的<router-view>.

最初我尝试创建一个子路由器,但后来我必须在 admin.html 中有一个新的 <router-view>(没有这个页面甚至无法加载)。相反,我希望 admin.html 视图显示在 app.html 的 <router-view> 内,并让子路由替换导航栏菜单中的 "main" 路由。

在app.js中我有以下路由器配置:

this.router.configure((config) => {
    config.title = "Welcome";
    config.map([
        { route: "", moduleId: "welcom", nav: false, title: "Welcome" },
        { route: "reports", moduleId: "reports", nav: true, title: "Reports" },
        { route: "admin", moduleId: "users", nav: true, title: "Administration" },
    ]);
});

在users.js中,我有这个代码:

this.router.configure((config) => {
    config.title = "Users";
    config.map([
        { route: "", moduleId: "users", nav: true, title: "Users" },
        { route: "settings", moduleId: "settings", nav: true, title: "Settings" },
    ]);
});

最初,菜单应该是:
- 管理
- 报告

和"welcome.html"应该是<router-view>里面的view(默认路由是'welcome')。

当用户单击(导航到)"Administration" 时,菜单应刷新为:
- 用户 - 设置

与 "users.html" 在 <router-view>.

但是,为了让它正常工作,我需要在 "users.html" 中有一个进一步的 <router-view> 而这并不是我真正想要的(我希望视图加载到 app.html的<router-view>).

有没有办法在 Aurelia 中实现这一点?我什至尝试将父路由器注入 Admin 构造函数(使用 Parent.of(router) 绑定)然后 router.addRoute()。添加了路线,但菜单没有更新(即使它是数据绑定的)。

我使用 Aurelia 创建了一个示例,它使用左侧菜单实现了分层菜单结构。

这里是notes about the sample project

您可以run the sample online测试一下

多级菜单示例展示了在构建 Aurelia SPA 网站时如何快速创建分层菜单。

多级菜单可帮助用户浏览页面层次结构。

配置路由和层次结构很容易,如下所示:

import aur = require("aurelia-router");
import mlmps = require("./MultiLevelMenuPipelineStep");

export class App {
    static inject = [aur.Router];

    constructor(public router: aur.Router) {
        this.router.configure((config) => {
            config.title = "Aurelia VS/TS";
            config.addPipelineStep("modelbind", mlmps.MultiLevelMenuPipelineStep);
            config.map([
                { route: ["", "home"], moduleId: "views/home", nav: true, title: "home", settings: { level: 0, show: true } },
                { route: ["item-1"], moduleId: "views/item-1", nav: true, title: "item 1", settings: { level: 0, show: true } },
                { route: ["item-1-1"], moduleId: "views/item-1-1", nav: true, title: "item 1.1", settings: { level: 1, show: false } },
                { route: ["item-1-2"], moduleId: "views/item-1-2", nav: true, title: "item 1.2", settings: { level: 1, show: false } },
                { route: ["item-2"], moduleId: "views/item-2", nav: true, title: "item 2", settings: { level: 0, show: true } },
                { route: ["item-2-1"], moduleId: "views/item-2-1", nav: true, title: "item 2.1", settings: { level: 1, show: false } },
                { route: ["item-2-2"], moduleId: "views/item-2-2", nav: true, title: "item 2.2", settings: { level: 1, show: false } },
                { route: ["item-2-2-1"], moduleId: "views/item-2-2-1", nav: true, title: "item 2.2.1", settings: { level: 2, show: false } },
                { route: ["item-2-2-2"], moduleId: "views/item-2-2-2", nav: true, title: "item 2.2.2", settings: { level: 2, show: false } },
                { route: ["item-2-3"], moduleId: "views/item-2-3", nav: true, title: "item 2.3", settings: { level: 1, show: false } }
            ]);
        });
    }
}

level属性用于建立层次结构。 show 属性 控制路由在菜单中的可见性。路由器导航管道步骤查看目标导航并相应地设置路由可见性。 navigation helper提供了一个按钮,用于从当前路由向上导航一个级别,并调用相应的导航命令到路由器。