最近、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 を使用する際の落とし穴の概要
イベントについて: MySQL 5.1 では、イベントの概念が導入され始めました。イベントは「時間ト...
1. リテラルとローカル変数へのアクセスは最も高速ですが、配列要素とオブジェクト メンバーへのアクセ...
最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...
序文一部のプロジェクトの初期段階では、シンプルさとスピードのために、開発と展開は単一のマシンで行われ...
必要なファイルをインストールする Yum インストール openssl-* -yデータベースインデッ...
目次1. 使用2. メッセージポップアップウィンドウが繰り返し表示される問題を解決する1. 使用Vu...
Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...
これまで、CSS の背景の属性には、color、image、repeat、attachment、po...
1. 背景一般的に、データ ウェアハウス環境では、row_number 関数を使用して特定のディメン...
この記事の例では、VUEコンポーネントに基づいて都市リストエフェクトを実装するための具体的なコードを...
この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内...
背景:場合によっては、json データをページに直接表示する必要があります (たとえば、インターフェ...
目次1. typeof演算子2. インスタンスオブ演算子3. typeof と instanceof...
では、早速スクリーンショットを実行してみましょう。黒い駒はプレイヤーの位置、赤い駒はコンピュータの位...
半夜かけてようやくブログのスタイルを大体完成させることができました。ブログ全体が青を基調としていて、...