Say*_*Pal 2 javascript aurelia
在我的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,即使我导航到some/other/view是否只找到一项,视图ThisView仍然被激活(即可以在浏览器中看到)。
有没有办法避免这种情况?为此我尝试了几件事。
true或falsefrompromise接受或拒绝激活此视图。但由于此视图是我的应用程序的登录页面,如果被拒绝(返回 false),它会尝试恢复以前不可用的位置,并引发错误。对于这种特定情况,应用程序也不希望恢复以前的位置。next.cancel(new Redirect("some/other/view")),我们可以指示用新的导航指令取消当前的导航指令。但我不确定如何从视图模型中执行相同的操作。请建议。
解决方法:我最终使用了一个简单的技巧,即使用if.bindon view of ThisView。然而,如果我们能够以某种方式用新指令取消当前指令(从页面生命周期),它可能会更有趣。
而不是 this.router.navigate("some/other/view) 您可以不导入重定向并在其中添加重定向吗,即
import {Redirect} from 'aurelia-router';
export class ThisView{
canActivate() {
const self = this;
var items = self.services.get(url);
if(items){
self.items= items;
if (self.items.length === 1) {
return new Redirect("some/other/view");
}
return true;
}
else {
self.logger.error("No item found");
return new Redirect("not-found-view");
}
}
Run Code Online (Sandbox Code Playgroud)
}
我已经制作了一个基本的 GistRun 来展示它是如何工作的 - 我没有使用承诺,但我相信概念是相同的。
https://gist.run/?id=52301f1b2898691ff4d54f320f61f6c6
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |