考虑以下示例:
主路由器位于
app.js
“ someparent”是“基本控制器和视图”。它在视图,自定义元素和绑定中具有一些可重用的html标记,这些标记将由其所有“子视图和控制器”共享。子视图和控制器将访问它们。
在“ someparent.html”中,除了共享标记外,还有一个<router-view>
标签,其中子路径和页面应在其中呈现,但someparent.html中没有导航。
从app.js中的主路由器/路由中,应该可以单击链接并登陆-不在父/基类“ someparent”本身上,而是直接在“ someparent”“基/父视图和控制器的子代上” ”,当您单击从app.js中的路由构建的app.html导航菜单中的链接时(以及可能在someparent.js中的路由将父级路由器注入子级路由器还是其他?),两者都呈现。
因此,基本上我需要实现与基本路由几乎相同的功能-但正如我提到的,我需要将多个这些路由/页面作为父视图/控制器的一部分。数周以来,我一直无法通过谷歌搜索找到任何有关此方面的信息,因此希望这里的某人能够理解我的要求,并知道如何在Aurelia中以正确的方式进行操作?
创建一个包含共享状态的类,并在视图模型中对该类进行依赖。您可以使用NewInstance.of
解析器来控制何时创建共享状态或重新使用共享状态。
这是一个示例:https : //gist.run?id=4cbf5e9fa71ad4f4041556e4595d3e36
shared-state.js
export class SharedState {
fromdate = '';
todate = '';
language = 'English';
}
shared-parent.js
import {inject, NewInstance} from 'aurelia-framework';
import {SharedState} from './shared-state';
@inject(NewInstance.of(SharedState)) // <-- this says create a new instance of the SharedState whenever a SharedParent instance is created
export class SharedParent {
constructor(state) {
this.state = state;
}
configureRouter(config, router){
config.title = 'Aurelia';
config.map([
{ route: ['', 'child-a'], moduleId: './child-a', nav: true, title: 'Child A' },
{ route: 'child-b', moduleId: './child-b', nav: true, title: 'Child B' },
]);
this.router = router;
}
}
注意:如果您使用@inject(SharedState)
而不是@inject(NewInstance.of(SharedState))
,SharedState
则所有组件将共享的一个实例。我不确定这可能是您要寻找的东西。的目的@inject(NewInstance.of(SharedState))
是确保父级及其子级都有自己的SharedState
实例。
child-a.js
import {inject} from 'aurelia-framework';
import {SharedState} from './shared-state';
@inject(SharedState)
export class ChildA {
constructor(state) {
this.state = state;
}
}
child-b.js
import {inject} from 'aurelia-framework';
import {SharedState} from './shared-state';
@inject(SharedState)
export class ChildB {
constructor(state) {
this.state = state;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句