Typescript Aurelia-无法访问具有视口的子路由器中的路由器
我有一个奇怪的问题,似乎没有找到问题所在。我有一个具有两个视口的子路由器,希望访问通过视口加载的其中一个组件(菜单)中的路由器。当我使用app.ts中的视口定义相同的路由时,菜单将显示路由条目,但对于子路由器中定义的路由,路由器变量未定义。我尝试了菜单的viewmodel,也尝试了将路由器显式绑定到路由器视图标记,但没有成功 如果有人能解释一下,那就太好了 这样做的原因是,与管理页面相比,我希望使用这些视口创建不同的页面布局。然而,我不确定这种分离是否真的是一种好方法。也许我可以简单地将管理员页面的侧视口设置为空。但我相信这需要一些CSS重写 应用程序tsTypescript Aurelia-无法访问具有视口的子路由器中的路由器,typescript,aurelia,Typescript,Aurelia,我有一个奇怪的问题,似乎没有找到问题所在。我有一个具有两个视口的子路由器,希望访问通过视口加载的其中一个组件(菜单)中的路由器。当我使用app.ts中的视口定义相同的路由时,菜单将显示路由条目,但对于子路由器中定义的路由,路由器变量未定义。我尝试了菜单的viewmodel,也尝试了将路由器显式绑定到路由器视图标记,但没有成功 如果有人能解释一下,那就太好了 这样做的原因是,与管理页面相比,我希望使用这些视口创建不同的页面布局。然而,我不确定这种分离是否真的是一种好方法。也许我可以简单地将管理员页
config.map([
{
route: ['', 'child'],
name: 'child',
moduleId: 'child/child',
},
{
route: 'admin',
name: 'admin',
moduleId: 'admin/admin,
},
]);
this.router = router;
子视图
<template>
[...]
<router-view name="side"></router-view>
<router-view name="main"></router-view>
</template>
<template>
[...]
${router} <!-- router is never accessible -->
<ul class="nav">
<li repeat.for="row of router.navigation" class="${row.isActive ? 'active' : ''}">
<a href.bind="row.href">${row.title}</a>
</li>
</ul>
</template>
菜单视图
<template>
[...]
<router-view name="side"></router-view>
<router-view name="main"></router-view>
</template>
<template>
[...]
${router} <!-- router is never accessible -->
<ul class="nav">
<li repeat.for="row of router.navigation" class="${row.isActive ? 'active' : ''}">
<a href.bind="row.href">${row.title}</a>
</li>
</ul>
</template>
[...]
${router}
-
路由器视图中的绑定上下文未与父绑定上下文合并。您可能可以执行$parent.router
(未对此进行测试),但最好在菜单视图的构造函数中插入router
澄清一下:每个子路由器都有自己的子容器。由该子路由器加载的组件将从该子容器解析其依赖项。像Router
和Element
之类的东西会自动注册到该子容器,这意味着您将始终获得相对于您请求的组件的“最内部”或“最近”实例
因此,如果您在应用程序中插入路由器
,您将获得根(AppRouter
),如果您将其插入菜单视图,您将获得所需的子路由器。感谢您的澄清。我想我已经试过注入路由器,但不太确定。等我有时间的时候我会试试的。谢谢。您需要注意的主要一点是,注入的路由器将是加载您注入的ViewModel的路由器,而您从configureRouter()
获得的路由器将是注入路由器的子路由器。他们不是同一个人。你可能已经尝试在你的根(应用程序)中注入路由器,但这永远不会起作用,因为该应用程序是创建根路由器的应用程序。听起来不是一个最佳方法。考虑使用构词。