aurelia - 使用相同的 Aurelia 路由基于动态变量动态选择视图模型的最佳实践?
问题描述
我知道可以使用动态指定 Aurelia 路由模块,navigationStrategy
但这不适用于我的目的,因为切换值驻留在仅运行一次的 RouterConfiguration 中。我需要一种方法来路由到不同的视图,其中切换值可以在一个会话期间多次更改。此外,并非所有路线都有多个视图。
根据动态值路由到同一路由上的不同视图的最佳实践是什么?
我想出了一些不同的策略,但我不确定哪一个是最可接受的方法。
使用
viewPorts
where 路由将具有静态moduleId
到视图,该视图将名称注入到<router-view name="view1_index"></router-view>
使用全局字符串的实例中,例如“view1”可以作为“view2”传递,等等。使用 2 个或更多实例,
<compose>
其中路由将再次具有静态moduleId
视图,该视图将使用全局变量if.bind
在<compose>
实例中切换在路由模块中使用
canActivate
并在满足条件时重定向到辅助视口在路由器配置中使用管道步骤来评估它是否应该指向不同的模块(如果可能的话)
如果有的话,这些策略中哪一个最被接受?如果所有这些都是路由到每条路由的不同视图的奇怪方式,应该怎么做?
解决方案
根据动态值路由到同一路由上的不同视图的最佳实践是什么?
撰写是您最好的选择。通常将参数传递给路由,在回调中捕获参数,使用参数在视图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;
}
推荐阅读
- oracle - 在 PLSQL 中使用查询生成 CSV 文件
- android - Android Studio 不会警告 newapi。为什么?
- r - 在网站内抓取表格 - 如何从元素中找到表格?
- html - 宽度属性可接受的单位是什么?
- java - 如何获取具有继承的 main 方法的类的名称?
- apache-spark - Apache pyspark 删除停用词并计算
- javascript - 当我从 git 克隆代码并在机器上运行 npm install 时,错误是这样的。请帮我
- python - 如何在 Selenium Python 中访问 Span 类或元素
- excel - 如何通过宏为单元格中的选定文本着色?
- javascript - 在 ReactJS 中查找和检查数组中的值