首页 > 解决方案 > 使用相同的 Aurelia 路由基于动态变量动态选择视图模型的最佳实践?

问题描述

我知道可以使用动态指定 Aurelia 路由模块,navigationStrategy但这不适用于我的目的,因为切换值驻留在仅运行一次的 RouterConfiguration 中。我需要一种方法来路由到不同的视图,其中切换值可以在一个会话期间多次更改。此外,并非所有路线都有多个视图。

根据动态值路由到同一路由上的不同视图的最佳实践是什么?

我想出了一些不同的策略,但我不确定哪一个是最可接受的方法。

如果有的话,这些策略中哪一个最被接受?如果所有这些都是路由到每条路由的不同视图的奇怪方式,应该怎么做?

标签: aurelia

解决方案


根据动态值路由到同一路由上的不同视图的最佳实践是什么?

撰写是您最好的选择。通常将参数传递给路由,在回调中捕获参数,使用参数在视图activate(params)模型上设置变量,然后使用该变量设置.view-model<compose>

在路由器配置中使用管道步骤来评估它是否应该指向不同的模块(如果可能的话)

这是很有可能的。一个常见的用例是身份验证,您可以在其中使用AuthorizeStep来检查用户是否已获得授权,如果未授权则将其重定向。请参阅http://foreverframe.net/exploring-aurelia-pipelines/。这也可以在中激活PreactivateStep

使用视图端口,其中路由将具有静态 moduleId 到视图,该视图将名称注入使用全局字符串的实例中,例如“view1”可以作为“view2”传递,等等。

除了将路线与屏幕特定部分的视图相关联之外,我建议不要将视口用于其他任何事情。

编辑:

您可能感兴趣的第三个选项是Redirect从您的canActivate()函数中返回 a 。

import { Redirect } from 'aurelia-router';

canActivate(params) {
  let thing = this.thing = await this.service.getById(params.id);
  if (!thing) {
    return new Redirect('somewhere');
  }
  return true;
}

推荐阅读