aurelia应用程序中的两种不同布局

Mar*_* M. 1 html javascript aurelia

我想为我的aurelia应用程序使用两个单独的布局.它们之间的区别在于没有侧边栏.目前我正在使用一个如下定义的布局文件:

<template>
    <div class="container">
        <router-view></router-view>
    </div>
</template>
Run Code Online (Sandbox Code Playgroud)

如果活动路线需要此侧边栏显示,我只是将其放入其视图中.我想要实现的是添加另一个默认具有此侧边栏的布局:

<template>
    <require from="../common/elements/sidemenu/sidemenu"></require>

    <div class="container">
        <sidemenu></sidemenu>
        <router-view></router-view>
    </div>
</template>
Run Code Online (Sandbox Code Playgroud)

所以问题是 - 如何做到这一点?甚至可以使用aurelia应用程序来设置多个布局(或主页,但是你可以称之为)?

Mat*_*vis 6

使用 aurelia.setRoot()

您可以通过指定脚本中的configure说明来手动设置应用程序index.html.通常,这是设置为main.

的index.html

<body aurelia-app="main">
Run Code Online (Sandbox Code Playgroud)

在此脚本中,您可以使用指定根视图模型aurelia.setRoot('root').如果没有提供参数,则使用约定'app'.

main.js

aurelia.start().then(() => aurelia.setRoot());
Run Code Online (Sandbox Code Playgroud)

但是,您可以将aurelia对象注入应用程序中的任何位置,并setRoot随时调用该函数以加载不同的根视图模型.

home.js

@inject(aurelia)
export class HomeViewModel {
    constructor(aurelia) {
        this.aurelia = aurelia;
    }
    doStuff() {
        this.aurelia.setRoot('withSidebar');
    }
}
Run Code Online (Sandbox Code Playgroud)

一个常见的用例是拥有一个登录页面,我已经为这个用例创建了一个完整的模板,您可以在这里查看,克隆或分叉:http://davismj.me/portfolio/sentry/