最近、vue ファミリー全体を見直しています。改めて読んでみるとより深く思い出せる気がしたので、特別に記録に残しました (この記事の vue-router のバージョンは v3.x です)。 1. ルータビュー<router-view> は、パスに一致するビュー コンポーネントをレンダリングするために使用される機能コンポーネントです。 <transition> および <keep-alive> と一緒に使用できます。両方を一緒に使用する場合は、必ず内部で <keep-alive> を使用してください。 <ルータービュー></ルータービュー> <!--または--> <ルータービュー名="フッター"></ルータービュー> <router-view> に名前が設定されている場合、対応するルーティング構成内のコンポーネントの下の対応するコンポーネントがレンダリングされます。 2. ルータリンク<router-link> タグは、ルーティング機能を備えたアプリケーションでのユーザー (クリック) ナビゲーションをサポートします。
<router-link :to="{ path: '/login'}" を tag="span" に置き換えます></router-link> 3. リダイレクトルートルートはログインにリダイレクトします const ルーター = 新しい VueRouter({ ルート: [ { パス: '/'、リダイレクト: '/login' } ] }) リダイレクトターゲットを動的に返す const ルーター = 新しい VueRouter({ ルート: [ { パス: '/a'、リダイレクト先: => { // メソッドはターゲットルートをパラメータとして受け取り、// リダイレクトされた文字列パス/パスオブジェクトを返します }} ] }) 4. ルーティングエイリアスルートが/bにアクセスすると、URLは/bのままですが、ルートマッチは/aになります。 const ルーター = 新しい VueRouter({ ルート: [ { パス: '/a'、コンポーネント: A、エイリアス: '/b' } ] }) 5. ルーティングプロップ$routeとの過剰な結合を避けるためにpropsを使用し、propsを使用してコンポーネント内で直接パラメータを受け取ることができるようにします。 5.1、ブールモードルートの後にパラメータを記述し、propsをtrueに設定します { パス: '/vuex/:id', 名前: 'Vuex'、 コンポーネント: () => import('@/view/vuex'), プロパティ: true、 メイト: タイトル: 'vuex' } } ジャンプに渡す必要のあるパラメータを設定する <router-link :to="{name:'Vuex', params: {id: '99999'}}" tag="h1">ジャンプ</router-link> <!--または--> トゥネクスト() { this.$router.push({ 名前: 'Vuex'、 パラメータ: { id: '99999' } }) } ジャンプ先のページでは、propsまたはthis.$paramsを使用してパラメータを取得します。 小道具: { id: { タイプ: 文字列、 デフォルト: '' } } <!--または--> this.$params.id 5.2 オブジェクトモード静的データを運ぶためにルート内のオブジェクトとしてpropsを設定する { パス: '/vuex', 名前: 'Vuex'、 コンポーネント: () => import('@/view/vuex'), 小道具: { id: '99999' }, メイト: タイトル: 'vuex' } } ジャンプ <router-link :to="{name:'Vuex'}" tag="h1">ジャンプ</router-link> <!--または--> トゥネクスト() { this.$router.push({ 名前: 'Vuex' }) } ジャンプ先のページでは、propsまたはthis.$paramsを使用してパラメータを取得します。 小道具: { id: { タイプ: 文字列、 デフォルト: '' } } <!--または--> this.$params.id 注: 静的データにのみ適用されます 5.3、機能モードまずルート内の Function に props を設定し、オブジェクトを返します。クエリでもパラメータでも、props に変換できます。 { パス: '/vuex', 名前: 'Vuex'、 コンポーネント: () => import('@/view/vuex'), プロパティ: ルート => ({ <!--クエリ--> id: ルート.クエリ.id、 <!--パラメータ--> 年齢: route.params.age })、 メイト: タイトル: 'vuex' } } ジャンプ <router-link :to="{name:'Vuex',query: {id: '99999'}, params:{age:'20'}}" tag="h1">ジャンプ</router-link> <!--または--> トゥネクスト() { this.$router.push({ 名前: 'Vuex'、 クエリ: { id: '999999' }, パラメータ: { 年齢: '20' } }) } ジャンプ先のページで、props または this.$route.params / this.$route.query を通じてパラメータを取得します。 小道具: { id: { タイプ: 文字列、 デフォルト: '' }, 年: { タイプ: 文字列、 デフォルト: '' } } <!--または--> this.$route.query this.$route.params 6. ルーティングガードルート ガードは主に、リダイレクトまたはキャンセルによってナビゲーションを保護するために使用されます。 6.1、グローバル事前ガードbeforeEachナビゲーションがトリガーされると、グローバル before ガードが作成された順序で呼び出されます。ガードは非同期的に解析および実行され、ナビゲーションはすべてのガードが解析されるまで待機します。
nextの使い方は以下のとおりです
const ルーター = 新しい VueRouter({...}) router.beforeEach((to, from, next) => { // ... }) 6.2、グローバル解決ガード beforeResolve2.5.0 の新機能。beforeEach に似ていますが、解析ガードはナビゲーションが確認される前、コンポーネントと非同期ルーティング コンポーネント内のすべてのガードが解析された後に呼び出される点が異なります。 router.eforeResolve((to, from, next) => { // ... }) 6.3、グローバルポストフック afterEachポストガードは次の関数を受け入れず、ナビゲーション自体を変更しません。 router.afterEach((to, from) => { // ... }) 6.4、ルータの排他ガードbeforeEnterグローバル before ガードと同じメソッド パラメータを使用して、ルート構成で独自の beforeEnter ガードを直接定義できます。 const ルーター = 新しい VueRouter({ ルート: [ { パス: '/foo', コンポーネント: Foo、 beforeEnter: (to, from, next) => { // ... } } ] }) 6.5、コンポーネント内のガード
ナビゲーションが確定する前にガードが呼び出されるため、ガードはこれにアクセスできず、表示される新しいコンポーネントはまだ作成されていません。コールバックを next に渡すことで、コンポーネント インスタンスにアクセスできます。ナビゲーションが確定するとコールバックが実行され、コンポーネント インスタンスがコールバック メソッドのパラメーターとして使用されます。 const フッター = { テンプレート: `...`, beforeRouteEnter(to, from, next) { 次(vm => { // `vm` 経由でコンポーネントインスタンスにアクセスします}) } }
現在のルートが変更されたがコンポーネントが再利用されるときに呼び出され、これを使用してコンポーネント インスタンスにアクセスできます。 定数Foo = { テンプレート: `...`, ルート更新前(to、from、next) { this.name = to.params.name 次() } }
このコンポーネントの対応するルートから移動するときに呼び出されます。通常、変更を保存する前にユーザーが突然離れるのを防ぐために使用されます。 next(false) を呼び出すことでキャンセルできます。 定数Foo = { テンプレート: `...`, beforeRouteLeave(to, from, next) { const answer = window.confirm('本当に終了してもよろしいですか?') (答え)の場合{ 次() } それ以外 { 次へ(偽) } } } 6.6、ナビゲーション分析プロセスを完了する
7. ルーティングメタ情報ルートを定義するときに、各ルートに対応する情報を格納するようにメタ オブジェクト フィールドを構成できます。 this.$route.meta 経由でアクセスするか、ルートガード内の to.meta および from.meta 経由でアクセスします。 const ルーター = 新しい VueRouter({ ルート: [ { パス: '/index', 名前: 'インデックス'、 コンポーネント: () => import('@/view/index'), メタ: { タイトル: 'ホームページ'、 rolu: ['管理者', 'ボス'] } } ] }) 8. トランジション効果router-view タグを transition タグで囲むだけです。アニメーション効果は自分で定義できます。 transition コンポーネントの使用方法を参照してください。また、親コンポーネントまたは app.js で watch を使用して $route の変更を監視し、さまざまなルートに応じて遷移コンポーネントの name 属性を置き換え、さまざまなアニメーション効果を実現することもできます。 <トランジション:name="トランジション名"> <ルータービュー></ルータービュー> </トランジション> モニター 時計: '$route' (to、from) { 定数 toD = to.path.split('/').length 定数 fromD = from.path.split('/').length this.transitionName = toD < fromD ? 'slide-right' : 'slide-left' } } 9. スクロール動作Router インスタンスを作成するときに、scrollBehavior メソッドを提供し、ルート オブジェクトとの間で送受信を行うことができます。 3 番目のパラメータ savedPosition は、ブラウザの進む/戻るボタンによってトリガーされた場合にのみ使用できます。 const ルーター = 新しい VueRouter({ モード: 'ハッシュ'、 ルート、 scrollBehavior(to, from, savedPosition) { if (保存された位置) { 新しい Promise を返します ((resolve, reject) => { タイムアウトを設定する(() => { 解決(保存された位置) }, 1000) }) } それ以外 { 戻り値: { x: 0, y: 0 } } } }) 10. ルーティング構成を完了するまず Vue と vue-router をインポートし、次に router を使用してルーティング情報のセットを定義します。各ルートは、次のプロパティを持つオブジェクトです。
具体的なコードは次のとおりです。 'vue' から Vue をインポートします 'vue-router' から VueRouter をインポートします。 Vue.use(VueRouter) 定数ルート = [ { パス: '/'、 リダイレクト: '/index' }, { パス: '/index', 名前: 'インデックス'、 コンポーネント: () => import(/* webpackChunkName: "index" */ '@/view/index'), メイト: タイトル: 'ホームページ'、 認証: 偽 } }, { パス: '/login', 名前: 'ログイン', コンポーネント: () => import(/* webpackChunkName: "login" */ '@/view/login'), メタ: { タイトル: 「ログイン」 認証: 偽 }, 子供たち: [ { パス: 'children', 名前: 「子供」 コンポーネント: () => import(/* webpackChunkName: "children" */ '@/view/children'), メイト: タイトル: 「ネストされたサブルート」 認証: 偽 } } ] } ] const ルーター = 新しい VueRouter({ モード: 'ハッシュ'、 ルート }) デフォルトルーターをエクスポートする 注意: ネストされたサブルートは、ネストされたページの <router-view> タグ内に配置する必要があります。 要約するこれで、Vue-Router チュートリアルに関するこの記事は終了です。Vue-Router のステップバイステップのチュートリアルに関する関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Linux echo テキスト処理コマンドの使用法と例
>>: MySQL で主キーと ROWID を使用する際の落とし穴の概要
ヒント1: 集中力を保つ最高のモバイル アプリは、1 つのことを非常にうまく行うことに重点を置いてい...
導入:スライダー ドラッグ検証は現在、多くの場所で使用されています。週末に 1 つ作成しようと思い、...
ハイパーリンクの下線を削除するには、スタイルシート CSS を使用する必要があります。当面は CSS...
環境の準備操作を開始する前に、hadoop バージョンがインストールされていることを確認してください...
目次概要1. スタックとヒープ2. 変数オブジェクトと基本データ型3. 参照データ型とヒープメモリメ...
最近の事例をお話ししましょう。オンライン Alibaba Cloud RDS 上のゲーム ログ ライ...
目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....
1. concat() 関数機能: 複数の文字列を 1 つの文字列に連結する構文: concat(s...
レコード ロックは、単一のインデックス レコードをロックします。レコード ロックは常にインデックスを...
まず、Docker とは何かを理解しましょう。 Docker は、アプリケーションをデプロイするため...
CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...
1. はじめに数日前、プロジェクトでトラバーサルに使用したときに落とし穴に遭遇し、解決するのに 1 ...
これは今日私が踏んだ4つの落とし穴を記念したものです...落とし穴1:地元のせいエラー:エラー 39...
目次1 Nginxのインストール2 Nginxの設定3 ホストファイルを変更する4 テストNginx...
1 概要システム Centos8 では、httpd を使用してローカル Web サーバーを構築します...