在Aurelia动态渲染不同的视图

时间:2017-08-08 12:19:10

标签: aurelia

在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
    }

}

1 个答案:

答案 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';
    }
}