私のAureliaビューモデルでは、canActivate()
のいくつかの前提条件をチェックしようとしており、それに基づいて別のビューにナビゲートするかどうかを決定します。見つかった唯一の項目がある場合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
のビューはまだ(つまりブラウザで見ることができる)が起動されます。
これを避ける方法はありますか?私はこれを試してみました。
- 戻り
true
、又はpromise
からfalse
受け入れる、またはこのビューの活性化を拒絶します。しかし、このビューはアプリケーションのランディングページの一種であるため、拒否された場合(falseが返された場合)は使用できない前の場所を復元しようとし、エラーをスローします。また、この特定のケースのアプリケーションでは、以前の場所の復元も望ましくありません。 - もう1つのアイデアは、
next.cancel(new Redirect("some/other/view"))
のような何かを行うことができるパイプラインステップのようなことでした。ここでは、新しいナビゲーション命令をキャンセルするように指示できます。しかし、私はビューモデルから同じことをどうやって行うのか分かりません。
お勧めします。
は回避策:私は最終的にThisView
のビューにif.bind
を使用しての簡単なトリックを使用していました。しかし、私たちがどういうわけか(ページライフサイクルから)新しい命令で現在の命令を取り消すことができれば、もっと面白いかもしれません。
ありがとうございました。パイプラインステップを使用することは、1回だけ行う必要があるため、これに対して過剰なことがありますが、各ナビゲーション要求に対してパイプラインステップが実行されます。 –