在aurelia中有什么办法我可以动态地渲染不同的视图。
async Activate(booking) {
//booking: is the route param
const hasRecord = await this.service.RecordExists(booking);
if (hasRecord) {
map(booking,form);
}
return {
//Render different template
}
}
答案 0 :(得分:2)
您应该尝试以另一种方式解决此问题。你为什么要导航到ViewModel并触发它的创建,只是为了不使用它并加载另一个ViewModel?看起来效率低下对吧?
Aurelia暴露路由器上的管道,你应该在那里检查并相应地重定向。查看PreActivate步骤here,您可以编写类似这样的内容(伪代码):
configureRouter(config, router) {
function step() {
return step.run;
}
step.run = async (navigationInstruction, next) => {
if(await this.service.RecordExists(navigationInstruction.queryParams...)
{
return next()
} else {
next.cancel(new Redirect('your other page'))
}
};
config.addPreActivateStep(step)
config.map([
{ route: ['', 'home'], name: 'home', moduleId: 'home/index' },
{ route: 'users', name: 'users', moduleId: 'users/index', nav: true },
{ route: 'users/:id/detail', name: 'userDetail', moduleId: 'users/detail' },
{ route: 'files/*path', name: 'files', moduleId: 'files/index', href:'#files', nav: true }
]);
}
修改强>
您可以遇到不想要重定向的情况,例如您有想要为baseurl / businessobject / id添加书签的用户,并且在该对象实际存在之前该url是可导航的
然后,您可以在ViewModel上使用getViewStrategy()
函数:
getViewStrategy(){
if(this.businessObj){
return 'existingObjectView.html';
} else {
return 'nonExisting.html';
}
}