【问题标题】:Aurelia Child Route by using Multiple <router-view></router-view>使用多个 <router-view></router-view> 的 Aurelia 子路由
【发布时间】:2016-06-14 23:26:35
【问题描述】:

我想使用 Aurelia 框架实现子路由。

我不是在寻找这个解决方案,如以下链接所示,multi-level-menu

下面是代码:

app.html

<div class="page-host">
     <router-view></router-view>
</div>

app.js/app.ts

var _self = this;
this.router.configure(config => {
        config.map(this.routes);
        config.mapUnknownRoutes(instruction => {
        _self.router.navigate(_self.defaultRoute);
            return '';
        });

        this.router = router;
        this.sideNavObj.navigationRouteList = this.router.navigation;
        return config;
    });

page1.html

<section>
    <h2>Child Routes</h2>
    <div>
        <div class="col-md-2">
            <ul class="well nav nav-pills nav-stacked">
                <li repeat.for="row of childRoutes">
                    <span click.delegate="router.navigate('#/' + row.route)">${row.title}</span>
                </li>
            </ul>
        </div>
        <div class="col-md-10 childRouterDiv">
            <router-view></router-view>
        </div>
    </div>
</section>

page1.js/page.ts

var _self = this;
this._router.configure(config => {
        config.map(_self.childRoutes);
        return config;
    });

场景:

一旦您导航到第 1 页,相应的子路线(第 1.1 页、第 1.2 页)就会出现在相应的页面下。

但是,如果您导航到作为主菜单一部分的 page2(不是子路由或子菜单),则合成/渲染发生在 page1.html 的 &lt;router-view&gt;&lt;/router-view&gt; 而不是 app.html 下。

由于我的 DOM 中有两个 &lt;router-view&gt;&lt;/router-view&gt;,因此正在使用最近的一个。

一旦我导航到其他页面&lt;router-view&gt;&lt;/router-view&gt; app.html 应该被使用并且其他(page1.html)应该从 DOM 中删除。

提前致谢。

【问题讨论】:

    标签: javascript aurelia


    【解决方案1】:

    顺便说一句,如果您使用箭头函数,则无需执行var _self = this;

    当你想要一个子路由器时,你没有将路由器注入到构造函数中,你可以在你的虚拟机上编写一个configureRouter 函数。将为您创建子路由器并将其传递给该函数。这在 Aurelia 骨架中的 child-router 中显示:

    import {Router, RouterConfiguration} from 'aurelia-router'
    
    export class ChildRouter {
      heading = 'Child Router';
      router: Router;
    
      configureRouter(config: RouterConfiguration, router: Router) {
        config.map([
          { route: ['', 'welcome'], name: 'welcome',       moduleId: 'welcome',       nav: true, title: 'Welcome' },
          { route: 'users',         name: 'users',         moduleId: 'users',         nav: true, title: 'Github Users' },
          { route: 'child-router',  name: 'child-router',  moduleId: 'child-router',  nav: true, title: 'Child Router' }
        ]);
    
        this.router = router;
      }
    }
    

    【讨论】:

    • 谢谢,我已经尝试过了,但控制台出现错误。在您的回复后,我意识到我的错误,其中一条路线需要空字符串。如有错误请指正。
    • 这可能是 StackOverflow 上有史以来最好的答案。
    • 可以在自定义元素中使用子路由器吗?
    • @BuildingJarl 所以我有中继器构建菜单,但我也想把登录放在右侧。我该怎么做?你找到解决办法了吗?
    • @ashley-grant 所以在子路由器中似乎需要一个空的路由路径?为什么有这个限制?
    猜你喜欢
    • 2021-05-26
    • 2020-04-07
    • 1970-01-01
    • 2015-04-18
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多