ルート遷移
プロジェクト内では、通常の router.push
などの方法を使用してルート遷移を行うことができますが、プロジェクト内で提供されている useRouterPush
を使用して遷移することもできます(推奨)。このセクションでは、主に useRouterPush
を紹介します。
介绍
このhookは、router.push
を二重にラップしています。主な目的は router.push
の代わりに使用することで、遷移をより簡便に行うことができる点です。useRouterPush
はオブジェクトを返し、以下のプロパティとメソッドが含まれています:
- routerPush: Vue Router の push メソッド。
- routerBack: Vue Router の back メソッド。
- routerPushByKey: ルートキーに基づいて遷移するメソッド。
- toLogin: ログインページに遷移するメソッド。
- toggleLoginModule: ログインモジュールを切り替えるメソッド。
- redirectFromLogin: ログインページからリダイレクトするメソッド。
注意
setup
外で使用する場合は、useRouterPush
に false
を渡す必要があります。
詳細説明
routerPush
と routerBack
は元々のプロパティなので、ここでは詳しく説明しません。主に以下のメソッドを紹介します。
routerPushByKey
ここでの key
はルートの name
プロパティを指します。例えば、あるルートの設定が以下のようになっている場合:
{
"name": "soybean",
"path": "/soybean-page",
"component": "layout.base$view.soybean-page"
}
このルートに遷移するコードは以下のようになります:
import { useRouterPush } from '@/hooks/common/router';
const { routerPushByKey } = useRouterPush();
routerPushByKey('soybean');
このメソッドは、オプションで query
や params
を渡すことができます。
toLogin
文字通り、ログインページに素早く遷移するメソッドです。遷移前にログイン情報を削除することを忘れないでください。さもないと、ルートガードでホームページにリダイレクトされてしまいます。
toggleLoginModule
このメソッドの引数の型は次のようになります:
/**
* The login module
*
* - pwd-login: パスワードログイン
* - code-login: 電話番号コードログイン
* - register: 登録
* - reset-pwd: パスワードリセット
* - bind-wechat: WeChat バインド
*/
type LoginModule = 'pwd-login' | 'code-login' | 'register' | 'reset-pwd' | 'bind-wechat';
このメソッドは、渡された LoginModule
に基づいてログインページにマウントされるログイン機能モジュールを変更します。必要に応じてモジュールを削除または拡張できますが、型が正しいことを確認すれば問題ありません。
redirectFromLogin
ログイン成功後に使用されます。手動でホームページに遷移するよりも直感的です。 このメソッドは、ログインページの redirect
クエリパラメータを使用してどのルートにリダイレクトするかを決定します。もし redirect
パラメータがない場合は、デフォルトでホームページに遷移します。
使用方法
<!-- ある.vueファイル -->
<script lang="ts" setup>
import { useRouterPush } from '@/hooks/common/router';
const { routerPushByKey } = useRouterPush();
</script>
<template>
<div>
<NButton type="primary" @click="routerPushByKey('root')">返回首页</NButton>
</div>
</template>
<!-- ある.tsファイル -->
import { useRouterPush } from '@/hooks/common/router';
// 注意して false を渡す
const { routerPushByKey } = useRouterPush(false);
function backToRoot() {
routerPushByKey('root')
}