ルータで設定されたルートリストの外にナビゲートするには、どうすればクライアント側のルーティングをエスケープできますか?複数のSPAを使用してMVCエリアを使用する - SPAルータルート外をナビゲートする
私はDurandal.jsを使用してプロジェクトを作成し、異なるエリア内にSPAを作成しました。私が遭遇した問題は、現在のSPAの外に移動して別のSPAに移動したい場合や、SPA以外の単純なcshtmlページであるアプリケーション全体のホームページに戻ってくるときです。
私がやったことは、DurandalのmapUnknownRoutesハンドラを使用してインターセプトし、window.location.hrefを使用してナビゲートすることです。これは動作しますが、アプリケーションのホームページ( "/")に移動する場合、ルータはSPAの "ルート"と一致し、ホームページには移動せず、SPAのルートルートに移動します。
この例では、エリアルートは、そのMVCのルートのように見える「/ spaHome」です:
context.MapRoute(
"spaHome_default",
"spaHome/{*catchall}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
ここで私はデュランダルのルータを設定するために何をやったかです:
var routes = [
{ route: ['spaHome', ''], moduleId: 'spaHome', title: "spaHome", hash: "#spaHome"},
{ route: 'one/anotherPage', moduleId: 'one/anotherPage', title: "one/anotherPage", hash: "#one/anotherPage"}
];
router.makeRelative({ moduleId: 'viewmodels' });
router.map(routes)
.mapUnknownRoutes(function (instruction) {
utils.navigateToPath(instruction.fragment);
return false;
})
.activate({ pushState: true, root: "/spaHome" });
任意のポインタこれに対して正しい方向へ導くことは大いに感謝しています!