バックエンドルーティング: URL リクエスト アドレスはサーバー上のリソースに対応しており、リクエスト アドレスに応じて異なるリソースが返されます。 フロントエンドルーティング: シングルページ アプリケーションでは、ユーザーによってトリガーされたイベントに基づいて、URL を変更すると、ページを更新せずに表示されるコンテンツが変更されます。 1. フロントエンドルーティングの実装原則URLハッシュパターン
次のように、 ページが更新されないことがわかりました。
3 つの主要なフロントエンド フレームワークにはそれぞれ独自のルーティングがあります。
2. vue-Routerの基本的な使い方2.1. インストールnpm インストール vue-router --save
vue-routerをルーターフォルダのindex.jsにインポートします。 'vue' から Vue をインポートします 'vue-router' から VueRouter をインポートします。 Vue.use(VueRouter) //vue-routerプラグインを参照 2.2. ルーティングを構成する//ルーティングとコンポーネントの関係を設定します。const route=[ { パス: '/'、 // '/' にアクセスすると、ルートは新しいアドレス '/home' にリダイレクトされます リダイレクト: '/home', }, { パス: '/home', コンポーネント: ホーム、 }, { パス: '/login', コンポーネント: ログイン、 }, ] 2.3. インスタンス化const ルーター = 新しい VueRouter({ mode: "history", //モードルートを設定する }); 2.4. 取り付けルート
アプリを新しいVue({ el:'#app', データ:{}、 // vueルーターにマウントし、 }) 2.5. ページに router-link と router-view を追加する<!-- ルートを追加する --> <router-link to="/home">ホーム</router-link> <router-link to="/about">について</router-link> <!-- ルーティングコンテンツを表示--> <ルータービュー /> デフォルトでは、 <router-link to="/home">ホーム</router-link> // <a href="#/home" rel="external nofollow" >ホームページ</a> としてレンダリングします
3. ルーターモードルーティング モードには、 3.1 ハッシュモード
3.2 履歴モード
必要なモードは const ルーター = 新しい VueRouter({ モード:'履歴' }) 4. ルータリンクのプロパティデフォルトでは、 4.1. タグ属性タグ属性は、router-link タグのレンダリング タイプを設定するために使用されます。たとえば、 <router-link to="/home" tag="button">ホーム</router-link> レンダリングされた要素を確認すると、 4.2. 属性の置換replaceは上記の <router-link to="/home" replace>ホーム</router-link> 4.3、アクティブクラス
<a href="#/" rel="外部nofollow" aria-current="ページ" クラス="ルーターリンクアクティブ" ルーターリンクアクティブ"> ホームページ</a> 現在の要素スタイルを設定するには、 次のようにアクティブクラスを設定します。 <router-link to="/" active-class="active">ホーム</router-link> // router-link-activeクラス名はactiveに置き換えられます グローバル const ルーター = 新しい VueRouter({ ルート、 モード: 'ハッシュ'、 linkActiveClasss: 'active' //クラス名を統一的に設定する}) 5. vue-Rrouterページジャンプ方法5.1. ルータリンクの実装// シンプルな書き方 <router-link to="/">Home</router-link> //動的パスを使用する <ルーターリンク:to="{パス:'/'}"></ルーターリンク> パスまたは名前を使用できます // パラメータを渡して 1 にジャンプ <ルーターリンク:to=" { 名前:'home'、パラメータ:{ id:'123'、名前:'gq' }} "> </ルーターリンク> // パラメータ <router-link :to=" でジャンプ { パス:'/'、クエリ:{ id:'123'、名前:'gq' }} "> </ルーターリンク> 5.2. js 経由のリダイレクト// シンプルに書くとこうなります。$router.push({ path:'/' }) // push は history.pushState と同じです // パラメータを指定してジャンプします this.$router.push({ 名前: 'home'、パラメータ: { id:'123'、名前:'gq' } }) //複数のパラメータがある場合 this.$router.push({ 名前: 'ホーム'、 パラメータ: { id:'123' , name:'gq' }, クエリ: { プラン:'private' } }) 6. 動的ルーティング場合によっては、ページの ルートの設定 ルーター:[ { パス: '/user/:id', コンポーネント:()=>{ import('../views/user.vue') } } ] ルートの追加 <router-link to="/user/123"> ユーザー:123 </router-link> <router-link to="/user/456"> ユーザー:456 </router-link> // id 値を動的に設定する <router-link :to=" '/user/'+id "> user:{{ id }} </router-link> 背後にあるダイナミックな価値を理解する this.$route.params.id ここでのIDは設定ルートで設定されたIDなので、一貫性を保つようにしてください。 方法2: クエリを使用してパラメータを渡す <ルーターリンク先="/user?id=123"></ルーターリンク> //値を取得するときはthis.$route.query.id さらに、 7. ルートの遅延読み込み遅延読み込みとは、使用されるときに読み込み、使用されないときには読み込まないことを意味します。 アプリケーションをパッケージ化してビルドすると、js パッケージが非常に大きくなり、読み込み速度に影響します。異なるルートに対応するコンポーネントを異なるコード ブロックに分割し、ルートにアクセスするときに対応するコンポーネントを読み込むことができれば、より効率的になります。 ルートの遅延読み込みは具体的に何を行うのでしょうか?主な機能は、ルートに対応するコンポーネントを js コード ブロックにパッケージ化し、ルートにアクセスしたときにのみ対応する js をロードすることです。 //直接参照 import Home from './component/home' 定数ルート = [ { パス:'/home', コンポーネント:ホーム } ] //遅延読み込み const ルート = [ { パス:'/home', コンポーネント:()=>{ import('./component/home') } } ] 8. ネストされたルート実際のアプリケーションでは、通常、ネストされたコンポーネントの複数のレイヤーで構成されます。 実装手順: まず、対応するサブコンポーネントを作成し、ルート マッピングで対応するサブルートを構成します。 2番目:コンポーネント内で { パス: "/body", コンポーネント: ()=> import( "../components/bodyLayout.vue"),, 子供たち:[ { パス: "マネージャー", コンポーネント: ()=> import( "../components/blankView.vue"), 子供たち:[ { パス: "ユーザー"、 コンポーネント: ()=> import( "../views/manager/user.vue") }, ] }, ] }
注意: ネストされたルートのパスを設定するときは、「/」を追加しないでください。追加するとルートが変更されます。 { パス: "/user", コンポーネント: ()=> import( "../views/manager/user.vue") } //この時点でアクセスルートは「/user」になります 9. ルーターとルートの違い
2つの結果はまったく同じであることがわかりました。このようにすれば、次の意味を理解することは難しくありません。 route は現在アクティブなルート オブジェクトであり、現在のルート情報が含まれています。このオブジェクトを通じて、 10. ルーティングガードナビゲーションガードを使用する理由は何ですか?要件を考えてみましょう: SPA アプリケーションでは、ページが切り替わると Web ページのタイトルはどのように変化するでしょうか? // 対応するコンポーネントに created(){ を追加します document.title="テスト" } このコンポーネントにアクセスすると、タイトルが自動的に「テスト」に切り替わります。 上記の方法だと、開発したコンポーネントの数だけ追加しなければならず、面倒です。そこで、ルーティングガードを使って統一的に変更し、メンテナンスしやすくする必要があります。 10.1 グローバルガード1>、 router.beforeEach((to,from,next)=>{ // から へのルート // ルートに名前属性を追加するだけです document.title = from.name 次() }) 注意: 上記の 3 つのパラメータの順序は変更できません。 next は欠落することはできません。必ず追加する必要があります。そうしないと、ページは次のステップにジャンプできず、空白領域で停止します。 2>、 router.afterEach((to,from)=>{ console.log('バックガード') }) 両方のガードはグローバル ガードです。afterEach 10.2. 専用ルーターガードルート構成で直接定義されたガードは、ルート オブジェクトの 1 つに配置され、このルートでのみ機能することを除いて、グローバル ガードと同じように使用されます。 { パス: "/test", 名前: "テスト", コンポーネント: ()=> import( "../views/manager/test.vue"), beforeEnter:(to,from,next)=>{ console.log('テスト開始前') 次() } } これらのガードには、前のグローバル ガードと同じメソッド引数があります。 10.3. コンポーネント内のガードルート ナビゲーション ガードは、ルート コンポーネント内で直接定義できます。コンポーネント内で定義されたガードは、コンポーネント内ガードです。 定数Foo = { テンプレート: `...`, beforeRouteEnter(to, from, next) { // このコンポーネントをレンダリングする対応するルートが確認される前に呼び出されます // いいえ!できる!コンポーネントインスタンス `this` を取得します。 // ガードが実行される前にコンポーネントインスタンスが作成されていないため}, ルート更新前(to、from、next) { // 現在のルートが変更されたがコンポーネントが再利用されたときに呼び出されます // たとえば、動的パラメータを持つパス /foo/:id の場合、/foo/1 と /foo/2 の間を移動すると、 // 同じ Foo コンポーネントがレンダリングされるため、コンポーネント インスタンスが再利用されます。この場合、このフックが呼び出されます。 // コンポーネントインスタンス `this` にアクセスできます }, beforeRouteLeave(to, from, next) { // このコンポーネントの対応するルートから移動するときに呼び出されます // コンポーネントインスタンス `this` にアクセスできます } } 注意: 11. キープアライブルートを切り替えると、ページは毎回再レンダリングされます。コンポーネントの中には、保持する必要があるデータを持つものがあります。切り替えるたびに再レンダリングしたくないので、 <div id="アプリ"> <router-link to="/home">ホーム</router-link> <router-link to="/login">ログイン</router-link> <キープアライブ> <ルータービュー></ルータービュー> </キープアライブ> </div>
11.1. キープアライブ特有のメソッドアクティブ化(){ console.log('アクティブ化') }, 非アクティブ化(){ console.log("非アクティブ化") } これら 2 つの関数は、コンポーネントが状態に保持され、 キープアライブライフサイクルの実行順序: 11.2. キープアライブ属性キープアライブには 2 つの非常に重要なプロパティがあります。 <キープアライブを含める="テスト"> <ルータービュー></ルータービュー> </キープアライブ> //テストコンポーネントは名前属性を追加します <template> <div> テスト </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:'テスト' } <スクリプト> この時点では、 同時にキャッシュする必要がある他のコンポーネントがある場合、 <keep-alive include="test,user"> <ルータービュー></ルータービュー> </キープアライブ> 除外の使用: <keep-alive exclude="test,user"> <ルータービュー></ルータービュー> </キープアライブ> 前の例とは逆に、 これで、vue-Router のインストール原理の詳細なプロセスに関するこの記事は終了です。より関連性の高い vue-Router コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL innodb B+ツリーの高さを取得する方法
>>: MySql のグループ化と各グループからランダムに 1 つのデータを取得する
序文セキュリティ部門からSQLインジェクションやXSS攻撃の脆弱性などに関する警告メールを頻繁に受け...
私はmysql ERROR 1045に遭遇し、この問題に長い時間を費やしました。私はそれを自分で書き...
<br />2 年前に PPK が投稿した素晴らしいブログ記事では、contains()...
データベースコマンド仕様すべてのデータベース オブジェクト名には小文字を使用し、アンダースコアで区切...
この記事では、CentOSでのMySQLの完全アンインストールについて記録しています。具体的な内容は...
JavaScript でポインターの位置を取得する方法は、イベント オブジェクトの pageX と ...
1. 800*600 未満の場合、Web ページの幅が 778 以内であれば、水平スクロール バーは...
最近はコース設計を実現するために、フロントエンドも少しやっています。今日はいくつかの機能を実現するた...
目次インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックスプッ...
1. 宇宙のルールHTML コード内の空白は通常、ブラウザによって無視されます。 <p>...
Linuxでyumを入力すると、プロンプトが表示されます: -bash: /usr/bin/yum:...
Web 上でフォントを使用することは、基本的なスキルであると同時に芸術でもあります。英語のフォントに...
フロントエンドとバックエンドを完全に分離する場合、Vue プロジェクトでトークン検証を実装する一般的...
SSHFS の機能: FUSE(Linux向けの最高のユーザー空間ファイルシステムフレームワーク)を...
目次ブートストラップと関連コンテンツの紹介グリッドシステムネストされた列列オフセット列の並べ替えナビ...