導入vue-router を使用するプロジェクトでは、VueRouter のインスタンス化は、その構成オプション ルートです。このオプションは、ルーティングとビュー コンポーネントの関係、またはルーティングと他のルーティングの関係を指定します。ルーター構成オプションは、最も重要な構成です。 ルート内のオブジェクト属性インターフェース RouteConfig = { パス: 文字列、 コンポーネント?: コンポーネント、 name?: string, // 名前付きルート *components?: { [name: string]: Component }, // 名前付きビューコンポーネント https://router.vuejs.org/zh/guide/essentials/named-views.html#%E5%B5%8C%E5%A5%97%E5%91%BD%E5%90%8D%E8%A7%86%E5%9B%BE リダイレクト?: 文字列 | 場所 | 機能、 プロパティ?: ブール値 | オブジェクト | 関数、 エイリアス?: 文字列 | 配列<文字列>, children?: Array<RouteConfig>, // ネストされたルート beforeEnter?: (to: Route, from: Route, next: Function) => void, *メタ?: 任意、 // 2.6.0以上 *caseSensitive?: boolean, // 一致ルールは大文字と小文字を区別しますか? (デフォルト値: false) *pathToRegexpOptions?: オブジェクト // 正規表現オプションをコンパイルする} パス: 文字列現在のルートのパスを指定します。ブラウザのURLがパスと一致すると、router-viewは現在のルートオブジェクトをレンダリングしてビューコンポーネントcomponent/componentsを指定します。 定数ルート = [ { パス: '/'、 コンポーネント: ホーム }, { パス:'/user', コンポーネント: ユーザー } ] const ルーター = 新しい VueRouter({ ルート }) Vue のルーターは、現在のパス文字列の一部として「/:プロパティ名」の形式で動的パスをサポートしていることに注意してください。この文字列ルートは、実際のURLの応答文字列情報と一致する動的ルートとして使用されます。 定数ルート = [ { パス: '/'、 コンポーネント: ホーム }, { path:'/user/:id/:local', // 動的パス:id :local コンポーネント: ユーザー } ] const ルーター = 新しい VueRouter({ ルート、 }) //ルートジャンプ <div id="app"> <ルータービュー /> // 次のリンクは /user/:id/:local に一致します <router-link to="/user/007/lk">User 007</router-link> <router-link to="/user/111/js">ユーザー 111</router-link> <router-link to="/user/10086/yk">ユーザー 10086</router-link> <router-link to="/user/241247/la">ユーザー 241247</router-link> </div> /* 上記のルートにジャンプすると、対応するルート ビュー コンポーネント ユーザーは、this.$route.params を通じて動的パスに一致する情報を取得できます。例: url /user/007/lk this.$route.params -> {id:'007',local:'lk'} url /user/10086/yk this.$route.params -> {id:'10086',local:'yk'} */ this.$route は、現在の Vue アプリケーションが配置されているルートの情報オブジェクトであることに注意してください。 // http://localhost:8080/#/user/10086/cc?wd=iPhone&aa=テスト { name: undefined, // 現在のルート名 *fullPath: "/user/10086/cc" // 現在の URL フルパス *hash: "" // 現在のルートのハッシュ *matched: [{…}] *メタ: {} params: {id: "10086", local: "cc"} // 動的パスはキーと値のペアのオブジェクトと一致します *path: "/user/10086/cc" // 現在の URL に一致するパス query: { // URL のクエリ文字列? 次のパラメータから解析されたオブジェクト wd: "iPhone", aa: 「テスト」 } } コンポーネント: コンポーネント | () => import(コンポーネント)現在のブラウザURLがルートパスと一致したときにレンダリングされるルートコンポーネント 'vue' から Vue をインポートします '../views/HotMusicList' から HotMusicList をインポートします 定数ルート = [ { パス: '/hot', コンポーネント: HotMusicList }, { // 動的パスマッチングは、次の方法で各曲ごとに異なる ID を取得します: id パス: '/music/:id', // 関数の形式によるルートの遅延読み込みにより、プロジェクトの開始時に読み込みが許可されていないコンポーネントをプロジェクトに読み込むことができます // ブラウザーが現在のルートにジャンプしたときにのみ、ルート コンポーネントがプロジェクトに読み込まれます // これを行う利点は、不要な読み込みを減らし、アプリケーションの読み込み速度と実行帯域幅を削減することです コンポーネント: () => import('../views/MusicPlay') } ] 注: プロジェクト開発において、ルーティング コンポーネントをアプリケーションの開始時にロードする必要がない場合は、遅延ロードを使用してください。 名前: 文字列ルートに名前を付けて、名前付きルートにします。ルートナビゲーションは名前を使用してリダイレクトできます。 (ルートがロケーションナビゲーションを使用する場合、名前付きルートのみがpramasパラメータを直接受け入れることができます) 定数ルート = [ { パス: '/user', 名前: 'ユーザー', コンポーネント: () => import('../views/User.vue') } ] リダイレクト: 文字列 | 場所 | 機能リダイレクト ルート。現在のアプリケーションがこのルートにアクセスして移動すると、このルートは、リダイレクトによって指定された新しいルートに自動的にリダイレクトされます (置換の形式で)。 定数ルート = [ { パス: '/contact', コンポーネント: ContactView }, { パス: '/user/:id', 名前: 'ユーザー', コンポーネント: () => import('../views/User.vue') }, { パス: '/oldpath1', リダイレクト: '/contact' }, { パス: '/oldpath2', リダイレクト: { 名前: 'ユーザー'、パラメータ: { 名前: 'シャオミン'、年齢: 19 } } }, /* リダイレクトは、oldpath にアクセスしたときに生成される場所オブジェクトであるパラメータを受け取る関数の形式をサポートします。リダイレクト関数の形式は、リダイレクト ルートのパスまたは場所を返す必要があります。 */ { パス: '/oldpath2', リダイレクト:(oldpathLocation) => '/contact' } { パス: '/oldpath4', リダイレクト:(oldpathLocation) => { name: 'ユーザー', パラメータ: { name: 'シャオミン', 年齢: 19 } } } ] プロパティ: ブール値 | オブジェクト | 関数ルートの動的マッチングは、通常、 this.$route.params を通じてのみ実行でき、動的に一致した値を取得します。 props プロパティが設定されている場合、動的に一致するキーと値のペアをコンポーネントの props としてビュー コンポーネントに直接渡すことができるため、コンポーネントの結合が大幅に削減されます。 ブール値。props が true に設定されている場合、route.params 内のすべてのキーと値のペアがコンポーネントの props 属性として設定されます。 定数ルート = [ { パス: '/hot', コンポーネント: HotMusicList }, { // 動的パスマッチングは、次の方法で各曲ごとに異なる ID を取得します: id パス: '/music/:id', // 遅延読み込みコンポーネントのルーティング: () => import('../views/MusicPlay'), プロパティ: true } ] // This.$route.id はコンポーネント内から props id を通じてアクセスできます <テンプレート> <div> 曲の再生 <audio controls :src="musicUrl"/> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ props: ['id'], // ルートの動的パスに一致するキーと値のペアは、現在のコンポーネントの同じ名前のプロパティに自動的に渡されます データ() { 戻る { 音楽URL: '' } }, 作成された() { フェッチ(`/song/url?id=${this.id}`) .then((res) => res.json()) .then(({ データ }) => { //実際の開発では、データ要求が成功したかどうかを判断する必要があります console.log(data[0]); // 曲データをデータに割り当てる this.musicUrl = データ[0]?.url }); }, }; </スクリプト> オブジェクト props オブジェクト形式では、オブジェクト キーをレンダリング コンポーネント props 属性の名前として使用し、値は対応する属性値になります (この書き方では値は変更されないため、渡される props はすべて静的属性になります)。 { パス: '/home/:id', 名前: 'ホーム'、 小道具: { a: 1、 b: 偽 }, コンポーネント: ホーム } props 関数は、現在のルート情報オブジェクトをパラメータとして受け取り、オブジェクトを返します。オブジェクトのキーはレンダリング コンポーネントの props 属性の名前で、値は対応する属性値です。 { パス: '/home/:id', 名前: 'ホーム'、 プロパティ: (ルート) => ({ a: route.query.wd, // ルート query.wd をコンポーネント Home の props に渡します b: route.params.id //ルート params.id をコンポーネント Home の b プロパティに渡します })、 コンポーネント: ホーム } エイリアス: 文字列| 配列[文字列]ルートのエイリアス。1 つのルートに複数のパスを設定できます。これらのエイリアスパスにアクセスすると、同じルーティングコンポーネントにアクセスされます。 定数ルート = [ { パス: '/hot', コンポーネント: HotMusicList、 エイリアス: ['/list','/rank','recommend'] } ] 子?: 配列[RouteConfig]ネストされたルーティングでは、現在のルートにセカンダリルーティングを設定できます [ { パス: '/home', コンポーネント: ホーム、 子供たち: [ { パス: '/home/follow', コンポーネント: () => import('../views/home/Follow') }, { path: 'recommend', //ルートの前の / なしの相対パスは "/home/recommed" と同等です コンポーネント: () => import('../views/home/Recommend') } ] } ] beforeEnter: (to: ルート、from: ルート、next: 関数) => voidルートの排他的ガード。アプリケーションが現在のルートに移動しようとしているときに、このガードを使用して、このナビゲーションをブロックするかどうかを決定するための論理操作を実行できます。 ルーターインスタンスメソッド概念: VueRouter インスタンス オブジェクトを Vue に設定すると、vue インスタンスには this.$router プロパティが追加され、this.$router が現在の VueRouter インスタンス オブジェクトになります。すべてのプログラム ナビゲーション API を提供します。 *VueRouterインスタンスプロパティ
VueRouter インスタンスメソッドrouter.push(文字列 | 場所)プログラムで特定のルートに移動する <テンプレート> <div> <h3>ホーム</h3> <div class="tab"> <router-link to="/home/follow">フォロー</router-link>| <button @click="gotoRecommend">推奨</button> </div> <ルータービュー /> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ メソッド: { gotoRecommend() { // this.$router.push("/home/recommend"); this.$router.push({path:"/home/recommend", クエリ:{wd:1,offset:0}}) }, }, }; </スクリプト> router.replace(文字列 | 場所)プログラムで現在のルートを新しいルートに置き換える <テンプレート> <div> <h3>ホーム</h3> <div class="tab"> <router-link to="/home/follow">フォロー</router-link>| <button @click="gotoRecommend">推奨</button> </div> <ルータービュー /> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ メソッド: { gotoRecommend() { // this.$router.replace("/home/recommend"); this.$router.replace({path:"/home/recommend", クエリ:{wd:1,offset:0}}) }, }, }; </スクリプト> router.go(整数値)現在のルート履歴スタックからいくつかの項目をプログラム的に前後に移動する this.$router.go(3) // 現在のルート履歴スタックから 3 エントリ進む this.$router.go(-1) // 現在のルート履歴スタックから 1 エントリ戻る this.$router.go(0) // ページを強制的に更新する 前方/後方の数がインスタンス ルート履歴スタックの長さより大きい場合、最後の項目に進むか、最初の項目に戻ることに注意してください。ただし、パフォーマンスの問題やページ フリーズが発生する可能性があるため、これはお勧めしません。 ルータ.back()プログラム的に現在のルート履歴スタックから1つ前のルートに戻る this.$router.back() // this.$router.go(-1) と同等 ルータ.転送()プログラム的に現在のルート履歴スタックから1ルート進む this.$router.forward() // this.$router.go(1) と同等 ルーティングの遅延読み込みvue.js を使用してシングルページ アプリケーションを作成する場合、パッケージ化された JavaScript パッケージは非常に大きくなり、ページの読み込みに影響します。この問題を最適化するには、ルートの遅延読み込みを使用できます。特定のルートを使用すると、対応するコンポーネントが読み込まれるため、効率が向上します。 遅延読み込みなしコンポーネントは最初に導入され、事前にロードされます。使用されているかどうかに関係なく、すでに存在している 'vue' から Vue をインポートします 'vue-router' から VueRouter をインポートします。 '../views/Home.vue' から Home をインポートします。 Vue.use(VueRouter) 定数ルート = [ { パス: '/'、 名前: 'ホーム'、 コンポーネント: ホーム }, ] const ルーター = 新しい VueRouter({ ルート }) デフォルトルーターをエクスポートする 遅延読み込みを使用するルートが使用される場合にのみ、対応するコンポーネントがロードされます。 'vue' から Vue をインポートします 'vue-router' から VueRouter をインポートします。 Vue.use(VueRouter) 定数ルート = [ { パス: '/mock', 名前:「モック」 // ルートレベルのコード分割 // これにより、このルート用の別のチャンク (about.[hash].js) が生成されます // ルートが訪問されたときに遅延ロードされます。 コンポーネント: () => import(/* webpackChunkName: "about" */ '../views/Mock.vue') } ] const ルーター = 新しい VueRouter({ ルート }) デフォルトルーターをエクスポートする 履歴モードとハッシュモードvue-router のデフォルトのハッシュ モード - URL のハッシュを使用して完全な URL をシミュレートするため、URL が変更されてもページはリロードされません。 履歴モードhistory - HTML5 History インターフェースの新しい pushState() および replaceState() メソッドを使用します。 (特定のブラウザのサポートが必要) これらの 2 つのメソッドは、ブラウザの履歴スタックに適用されます。既存の back、forward、go メソッド (Router のインスタンス メソッドで表示できます) に基づいて、履歴を変更する機能を提供します。変更を実行すると、現在の URL は変更されますが、ブラウザはすぐにバックエンドにリクエストを送信しません。 手動設定 効果 ハッシュモードハッシュ - アドレスバーの URL 内の # 記号 (このハッシュは暗号ハッシュ操作ではありません)。たとえば、この URL: http://localhost:8081/#/form では、ハッシュ値は #/form です。その特徴は、ハッシュが URL に表示されるものの、HTTP リクエストには含まれず、バックエンドには影響しないため、ハッシュを変更してもページはリロードされないことです。 ルートガードグローバルルーティングガード
ケース1 vue-router を使用して開発されたプロジェクトでは、異なるルートを切り替えると、通常、出発ルート コンポーネントがアンインストールされ、出発ルート コンポーネントがマウントされます。
エクスポートデフォルト{ プロパティ: ['id'], データ() { 戻る { 音楽URL: '' } }, beforeRouteEnter (to、from、next) { // このコンポーネントをレンダリングする対応するルートが確認される前に呼び出されます // いいえ!できる!コンポーネントインスタンス `this` を取得します。 //ガードが実行される前にコンポーネントインスタンスが作成されていないため console.log(undefined) }, beforeRouteUpdate (to、from、next) { // 現在のルートが変更されたがコンポーネントが再利用されたときに呼び出されます // たとえば、動的パラメータを持つパス /foo/:id の場合、/foo/1 と /foo/2 の間を移動すると、 // 同じ Foo コンポーネントがレンダリングされるため、コンポーネント インスタンスが再利用されます。この場合、このフックが呼び出されます。 // コンポーネントインスタンス `this` にアクセスできます }, beforeRouteLeave (to、from、next) { // このコンポーネントの対応するルートから移動するときに呼び出されます // コンポーネントインスタンス `this` にアクセスできます } } コンポーネント固有のルーティングガードメソッドにはすべて、次の3つのパラメータが含まれていることに注意してください。
next() // ルーティング ジャンプを許可する next(true) // ルーティング ジャンプを許可する next(false) // ルーティング ジャンプを許可しない next('/') / next({ path: '/' }) // 別のアドレスにジャンプします。現在のナビゲーションが中断され、新しいナビゲーションが実行されます。任意の場所オブジェクトを next に渡すことができ、replace: true、name: 'home' などのオプションを設定できます。 // beforeRouteEnter の next メソッドのみがコールバック関数を受け入れることができることに注意してください。 // コールバック関数は、現在のルーティングコンポーネントインスタンスオブジェクトをパラメータとして受け取り、それを通じて現在のコンポーネントを操作できます beforeRouteEnter(to, from, next) { console.log(宛先、送信元) console.log('コンポーネントが入力されようとしていますが、コンポーネントインスタンスがまだ存在しません', this) 次(vm => { フェッチ(`/song/url?id=${vm.id}`) .then((res) => res.json()) .then(({ データ }) => { //実際の開発では、データ要求が成功したかどうかを判断する必要があります console.log(data[0]); // 曲データをデータに割り当てる vm.musicUrl = データ[0]?.url }); }) // ルーティングのジャンプを許可する } ケース2 vue-router を使用して開発されたプロジェクトでは、異なるルートを切り替えると、通常、出発ルート コンポーネントがアンインストールされ、出発ルート コンポーネントがマウントされます。 beforeEnter(to, from, next) は、ルータが現在のルートに移動しようとしているときにトリガーされます。const router = new VueRouter({ ルート: [ { パス: '/foo', コンポーネント: Foo、 beforeEnter: (to, from, next) => { // ... } } ] }) ログイン認証ルートの排他ガード設定例 定数ルート = [ { パス: '/'、 コンポーネント: ホーム }, { パス: '/discover', コンポーネント: () => import('../views/Discover') }, { パス: '/mine', コンポーネント: () => import('../views/Mine'), //ルート排他ガード beforeEnter(to, from, next) { // このガードは DOM 操作を実行せず、コンポーネント自身の状態を読み書きしないため // このようなガードはルート排他ガードとして使用できます // 正しいアプローチは Cookie ストレージ内です if (localStorage.getItem("user")) { 次(); } それ以外 { // ここには this はなく、next はコールバック関数を受け取り、コールバック関数にジャンプします // 次の記述は個人ページに入り、個人ページからログインページにリダイレクトするため、不要なバグが発生する可能性があります // 次((vm) => { // vm.$router.replace('/landr') // }); next({name:'login',params:{to}}); //このジャンプを防ぎ、指定されたルートに直接移動します} } }, { パス: '/landr', // ログインして登録 コンポーネント: () => import('../views/loginanregister/LoginAndRegister'), 子供たち: [ { 名前:'ログイン', パス: 'ログイン', コンポーネント: () => import('../views/loginanregister/Login') }, { パス: 'register', コンポーネント: () => import('../views/loginanregister/Register') } ] } ] ケース3グローバル ルート ガードは、アプリケーション内に同じ論理ルート ガード判定を実行する必要があるルートが複数あり、論理操作でコンポーネント DOM またはコンポーネント コンポーネントの状態を直接操作する必要がない場合に、グローバル ルート ガードを使用できます (グローバル ガードの最も一般的な用途はログイン検証です)。 'vue' から Vue をインポートします 'vue-router' から Router をインポートします。 '../views/Home' から Home をインポートします Vue.use(ルーター) 定数ルート = [ { パス: '/'、 名前: 'ホーム'、 コンポーネント: ホーム }, { パス: '/discover', 名前: 「発見」 コンポーネント: () => import('../views/Discover') }, { パス: '/mine', 名前: 「マイン」 コンポーネント: () => import('../views/Mine'), }, { パス: '/landr', // ログインして登録 コンポーネント: () => import('../views/loginanregister/LoginAndRegister'), 子供たち: [ { 名前: 'ログイン', パス: 'ログイン', コンポーネント: () => import('../views/loginanregister/Login') }, { パス: 'register', コンポーネント: () => import('../views/loginanregister/Register') } ] } ] const router = 新しいルーター({ ルート、 linkExactActiveClass: 'active' }) // グローバルルートガード すべてのルートジャンプはこのガードを呼び出します // グローバルルートガードは、Vue ルーターアプリケーションでのログイン検証に最適な場所でもあります router.beforeEach((to, from, next) => { if(to.name === "Mine" || to.name === "Discover") { // このガードは DOM 操作を実行せず、コンポーネント自身の状態を読み書きしないため // このようなガードはルート排他ガードとして使用できます // 正しいアプローチは Cookie ストレージ内です if (localStorage.getItem("user")) { 次(); } それ以外 { // ここには this はなく、next はコールバック関数を受け取り、コールバック関数にジャンプします // 次の記述は個人ページに入り、個人ページからログインページにリダイレクトするため、不要なバグが発生する可能性があります // 次((vm) => { // vm.$router.replace('/landr') // }); next({ name: 'login', params: { to } }); //このリダイレクトを防ぎ、指定されたルートに直接移動します} }それ以外 { 次() } }) デフォルトルーターをエクスポートする router.beforeResolve(to,from,next) グローバルフロントガード、beforeEach がトリガーされた後 Vue-Router ルートの詳細設定に関するこの記事はこれで終わりです。Vue-Router ルート設定に関するより詳しい内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Nginx 最適化サービスで Web ページ圧縮を実装する方法
目次導入1. MySQL マスタースレーブレプリケーション1. MySQLレプリケーションタイプ2....
新しい Linux ディストリビューションには rc.local ファイルがなくなりました。サービス...
アルファベット順DTD: このタグが許可される XHTML 1.0 DTD を示します。 S=厳密、...
この記事ではvueを使用し、マウスクリックイベントといくつかの小さなページの最適化を追加します。 基...
ローカルの MySQL バージョンが比較的低いため、最近 MySQL のバージョンをアップグレードす...
記録として、将来使用される可能性があり、困っている友人も使用できます。 BBはもうやめて、まずはレン...
目次Cocos Creator のリソース管理に関する問題リソースの依存関係リソースの使用レスローダ...
目次1. 使いやすい2. 関数内でジェネリックを使用する3. クラス内でジェネリックを使用する4. ...
1. Dockerコンテナ間の相互接続Docker は現在、軽量の仮想化ソリューションとなっています...
目次01 レプリカセットアーキテクチャ02 MySQL Shellの紹介とインストール03 My...
1. はじめにデータベース内のデータ量が一定レベルに達すると、システムパフォーマンスのボトルネックを...
CSS を使ってさまざまなグラフィックを実現できるのは素晴らしいことです。画像を切り取る必要はなく、...
主キーとは何ですか?主キーは、テーブル内の各タプル (行) を一意に識別するテーブル内の列です。主キ...
Windows 7 で MySQL 5.7.17 をインストールする方法についてのグラフィック チ...
この記事では、絵文字用の MySQL Java サーバーのサポートと問題解決方法について説明します。...