【发布时间】:2020-09-23 22:11:46
【问题描述】:
在我的 Aurelia 视图模型中,我正在尝试检查canActivate() 中的一些前提条件,并根据它决定是否导航到不同的视图。
export class ThisView{
canActivate() {
const self = this;
const promise = self.services.get(url)
.then((items: any) => {
if (items) {
self.items= items;
if (self.items.length === 1) {
this.router.navigate("some/other/view");
//return false;
}
//return true;
} else {
self.logger.error("No item found");
//return false;
}
});
return promise;
}
}
现在即使我导航到some/other/view,如果只找到一项,ThisView 的视图仍然会被激活(即可以在浏览器中看到)。
有没有办法避免这种情况?我为此尝试了几件事。
- 从
promise返回true或false以接受或拒绝激活此视图。但由于此视图是我的应用程序的一种登录页面,如果被拒绝(返回 false),它会尝试恢复以前的位置,该位置不可用,并引发错误。对于这种特定情况,应用程序也不希望恢复以前的位置。 - 另一个想法是做一些类似管道步骤的事情,我们可以做一些类似
next.cancel(new Redirect("some/other/view"))的事情,我们可以指示用新的导航指令取消当前的导航指令。但我不确定如何从视图模型中执行相同的操作。
请提出建议。
解决方法:我终于在ThisView 的视图中使用了一个简单的技巧,即使用if.bind。但是,如果我们能以某种方式取消当前指令(来自页面生命周期)并使用新指令,它可能会更有趣。
【问题讨论】:
标签: javascript aurelia