我有两列布局设置,两列具有非常相似的功能,因此正在重复使用相同的视图模型。 Hovewer,渲染可能会略有不同,具体取决于渲染的哪一方,所以想知道如何访问视口信息?
考虑这个设置:
app.js
export class App {
configureRouter(config: RouterConfig, router: Router): void {
config.map([ {
route: '',
name: 'home',
viewPorts: {
left: { moduleId: 'module1' },
right: { moduleId: 'module1' },
}
}]);
}
}
app.html
<template>
<router-view name="left"></router-view>
<router-view name="right"></router-view>
</template>
module1.js
export class Module1 {
activate(params: Object, routeConfig: Object, instruction: NavigationInstruction): void {
//which view port am I being rendered in?
}
}
答案 0 :(得分:2)
我的解决方案是查找导航指令的视口指令对象,并比较它是否是完全相同的对象实例。我已经为这样做创造了一种方便的方法。
导航指令extension.js
import {NavigationInstruction} from 'aurelia-router';
NavigationInstruction.prototype.viewPortFor = function(viewModelInstance: Object): string {
for (let key in this.viewPortInstructions) {
let vpi = this.viewPortInstructions[key];
if (vpi.component.viewModel === viewModelInstance)
return key;
}
return undefined;
}
module1.js
import 'navigation-instruction-extension.js';
export class Module1 {
activate(params: Object, routeConfig: Object, instruction: NavigationInstruction): void {
instruction.viewPortFor(this); //returns either 'left' or 'right'
}
}
答案 1 :(得分:0)
我添加了一个新的Pull Request,当新版本发布时,视口的名称可以通过常规生命周期参数访问:
activate(params: Object, routeConfig: Object, instruction: NavigationInstruction): void {
routeConfig.currentViewPort //the name of current viewport
}