ルーティングプラグインをモジュール方式で使用する(1)インストール npm で vue-router をインストールします (2)ファイルディレクトリを構築する srcディレクトリにルーターフォルダを作成し、index.jsを作成します。 (3) ここでは、コード管理を容易にするために、モジュール方式でルートを作成します。ここでは、ルートプラグインを登録し、ルートオブジェクトを作成するだけです。作成されたルーティング オブジェクトは、export default キーワードを通じて公開されます。 //index.js 'vue-router' から VueRouter をインポートします。 'vue' から Vue をインポートします 「../views/Home」からHomeをインポートします。 Vue.use(VueRouter) //ルーティングプラグインを登録 export default new VueRouter({ ルート:[{ パス:'/'、 コンポーネント:ホーム }] }) (4)作成したルーティングオブジェクトをエントリファイルmain.jsにインポートし、Vueインスタンスにマウントします。 //メイン.js 'vue' から Vue をインポートします './App.vue' からアプリをインポートします。 '@/store' からストアをインポートします import router from '@/router' //ここで、作成したルーティング オブジェクトを導入します。モジュラープログラミングの考え方 Vue.config.productionTip = false Vue.prototype.bus = 新しい Vue() 新しいVue({ 店、 ルーター、 レンダリング: h => h(App), }).$mount('#app') ルートの使用宣言型ナビゲーションラベルを飛び越えて 宣言型ナビゲーション: ルーティングルールの定義 { パス:'/'、 コンポーネント:ホーム 名前:ホーム } (1)ルータリンクナビゲーションタグのto属性は文字列を使用する <router-link to="/">ホームへ移動</router-link> (2)ルーターリンクナビゲーションタグを使用してオブジェクトを作成する方法 パスを使用したマッチング <router-link :to="{path:'/'}">ホームへ移動</router-link> ルータリンクナビゲーションタグの属性はオブジェクトを使用し、ルート名と一致します <router-link :to="{name:'home'}">ホームへ移動</router-link> プログラムによるナビゲーションJSジャンプとして理解できる プログラムによるナビゲーション: 次の例には、動的ルート マッチングとクエリ パラメータに関する知識が含まれています。よくわからない場合は、まずこれら 2 つの内容を読んでから、ここに戻って内容を読んでください。 // 文字列 router.push('home') // オブジェクト router.push({ path: 'home' }) // 名前付きルート router.push({ name: 'user', params: { userId: '123' }}) // クエリパラメータを使用すると、/register?plan=private になります router.push({ パス: 'register', クエリ: { プラン: 'private' }}) 注: パスが指定されている場合、パラメータは無視されますが、上記の例のクエリの場合はそうではありません。代わりに、ルート名とパラメータを指定するか、パラメータを含む完全なパスを手動で記述する必要があります。 定数ユーザーID = '123' router.push({ name: 'user', params: { userId }}) // -> /user/123 router.push({ パス: `/user/${userId}` }) // -> /user/123 // ここでのパラメータは有効ではありません router.push({ path: '/user', params: { userId }}) // -> /user 動的ルートマッチングルーティングルールの定義 { パス:'/user/:id', コンポーネント:ユーザー 名前:ユーザー } <router-link to="/user/01">ホームへ移動</router-link> <router-link :to="{path:'/user/01'}">ホームへ移動</router-link> <router-link :to="{name:'/user',params={id:'01'}}">ホームへ移動</router-link> 上記のように定義することで、$route.params.idを通じて動的ルートパラメータを取得できます。id値は「01」です。 知らせ: マッチングにオブジェクトメソッドを使用する場合、パスとパラメータは使用できません。名前とパラメータのみ 次のメソッドは、ルーティング ルール {path:'/user/:id'} に一致できません。次の式は '/user' としてのみ理解されます。 ルートが * ワイルドカードに一致した場合でも、path 属性が存在する場合は params 属性が解析されないため、params は渡されません。 { // すべてのパスに一致します パス: '*' } { // `/user-` で始まるパスに一致します。パス: '/user-*' } ワイルドカードマッチングパス通常、* を使用して他の予期しないパスをキャプチャし、それらをフォールバックとして処理し、通常は 404 エラー ページに移動します。 <router-link to="/user?name=zhangsan">...</router-link> <router-link :to="{path:'/user?zhangsan'}">...</router-link> <router-link :to="{path:'/user',query:{name:'zhangsan'}}">...</router-link> <router-link :to="{name:'user',query:{name:'zhangsan'}}">...</router-link> ワイルドカードを使用すると、pathMatch というパラメータが $route.params に自動的に追加されます。ワイルドカードに一致するURLの部分が含まれます クエリパラメータ<router-link to="/user?name=zhangsan">...</router-link> <router-link :to="{path:'/user?zhangsan'}">...</router-link> <router-link :to="{path:'/user',query:{name:'zhangsan'}}">...</router-link> <router-link :to="{name:'user',query:{name:'zhangsan'}}">...</router-link> クエリ パラメータは、動的なルート パラメータ マッチングとは異なります。パスが使用されている場合でも、クエリを使用してパラメータを渡すことは可能です。 上記のクエリによって渡されたパラメータは ルーティングパラメータの変更への対応ルートが (1)監視による監視 定数ユーザー = { テンプレート: '...'、 時計: $route(宛先、送信元) { // ルートの変更に応答します... } } } (2)航行監視員による監視 定数ユーザー = { テンプレート: '...'、 ルート更新前(to、from、next) { // ルートの変更に反応します... // next() を忘れずに呼び出してください } } 名前付きルート、ルートエイリアス、リダイレクト特に、これら 3 つの概念をまとめて説明することで、それらの違いをより明確に区別できるようにしました。これらの内容はルーティング ルールで構成されます。 { パス: '/pageOne', コンポーネント:PageOne、 エイリアス: "/firstPage", 名前:"ページ1", リダイレクト:{name:'pageTwo'} }, { パス: '/pageTwo', コンポーネント:PageTwo、 名前:'ページ2' } (1)ルートの命名:これは、このルートに名前を付けることと理解できる。 name属性でルートに名前を付けたとしても ルート: [ { パス: '/user/:userId', 名前: 'ユーザー', コンポーネント: ユーザー } ] (2)ルートエイリアス:このルートの2番目の名前として理解することができます。 たとえば、/a のエイリアスは /b です。ユーザーが /b にアクセスすると、URL は /b のままですが、ルートに一致するコンテンツは /a になります。つまり、ナレッジ URL コンテンツは、/b のコンテンツが実際には /a であることを示します。 注意: ここでのエイリアスは、名前付きルートのように名前を直接記述するのではなく、パスとして表現する必要があります。 const ルーター = 新しい VueRouter({ ルート: [ { パス: '/a'、コンポーネント: A、エイリアス: '/b' } ] }) (3)リダイレクト:/aにアクセスすると/bに直接ジャンプするという意味になります。 リダイレクト ステートメントには 3 つの形式があります。
const ルーター = 新しい VueRouter({ ルート: [ { パス: '/a'、リダイレクト: '/b' } ] })
const ルーター = 新しい VueRouter({ ルート: [ { パス: '/a'、リダイレクト: { 名前: 'foo' }} ] })
const ルーター = 新しい VueRouter({ ルート: [ { パス: '/a'、リダイレクト先: => { // メソッドはターゲットルートをパラメータとして受け取り、// リダイレクトされた文字列パス/パスオブジェクトを返します }} ] }) ネストされたルートネストされたルーティングは、このように理解できます。一致したルートによってレンダリングされるコンポーネントには、ルーティング コンポーネントが含まれます。ルートが一致すると、'/user' はコンポーネント User をレンダリングしますが、User コンポーネントの <router-view ></router-view> で一致を続行したい場合があります。次に、/user/childRouteName でさらに一致させる必要があります。 「childRouteName」は、ルーティング ルールの子の対応するパスの値です。 { パス: '/user', コンポーネント: ユーザー、 子供たち: [ { // /user//profile が正常に一致すると、 // UserProfile はユーザーの <router-view> パスにレンダリングされます: 'profile', コンポーネント: UserProfile }, { // /user//posts が正常に一致すると、 // UserPosts はユーザーの <router-view> パス: 'posts' にレンダリングされます。 コンポーネント: UserPosts } ] } アプリ.Vue <div id="アプリ"> <ルータービュー></ルータービュー> </div> ユーザーコンポーネント 定数ユーザー = { テンプレート: ` <div class="ユーザー"> <span>ユーザー コンポーネント</span> <ルータービュー></ルータービュー> </div> ` } 知らせ: ネストされたルート、つまり子ルートが定義されている場合、正しく一致するにはルートが完全である必要があります。つまり、/user/profile が正常に一致した場合、/user は正常に一致しません。 名前付きビューコンポーネント上で複数のビューを同時にレンダリングする場合は、複数のビューをネストするのではなく、同じレベルで表示することに注意してください。現時点では、ビューに名前を付けることでこの問題を解決できます。 { パス:"/namingRoute", コンポーネント:{// コンポーネントは「s」で終わることに注意してください。単独で使用された場合、そうではありません。 デフォルト:ホーム、 1:ページワン、 2:ページ2 } } コンポーネント定義 <router-view></router-view>//default に対応するコンポーネントをレンダリングします<router-view name="one"></router-view>//one に対応するコンポーネントをレンダリングします<router-view name="two"></router-view>//two に対応するコンポーネントをレンダリングします URL が :/namingRoute で、ルートが一致すると、対応する router-view コンポーネントに従ってレンダリングされます。 ナビゲーションガード(1)グローバルガードこれは、グローバル ルーター インスタンス オブジェクト router によって定義されたガードとして理解できます。
方向: beforeEach((to,from,next)=>{ //... })
コンポーネントと非同期ルートコンポーネントのすべてのガードが解決された後、解決ガードが呼び出されます。 方向: router.beforeResolve((to, from, next) => { // ... })
フックは next 関数を受け入れず、ナビゲーション自体を変更しません。 方向: router.afterEach((to, from) => { // ... }) 使用される場所: 通常はルーターフォルダ内のindex.js const ルーター = 新しい VueRouter({...}) //グローバルフロントガード router.beforeEach((to, from, next) => { // ... }) //グローバル解決ガード router.beforeResolve((to, from, next) => { // ... }) //グローバルポストフック router.afterEach((to, from) => { // ... }) (2)専用ルーターガードこれはルーティングルールで定義されたガードとして理解できる。
(3)部品内部の保護これはコンポーネント内で定義されたガードとして理解できる。
コンポーネント インスタンスはまだ作成されていません。ルートが確定する前に呼び出されます。 定数ユーザー = { テンプレート: `...`, beforeRouteEnter(to, from, next) { // このコンポーネントをレンダリングする対応するルートが確認される前に呼び出されます // いいえ!できる!コンポーネントインスタンス `this` を取得します。 // ガードが実行される前にコンポーネントインスタンスが作成されていないため} } 知らせ: コンポーネント インスタンスがまだ作成されていないため、ガードはこれを直接使用して vue インスタンス オブジェクトにアクセスすることはできません。ただし、次のメソッドにコールバックを渡して、コンポーネント インスタンスを見つけることができます。 next() にコールバックを渡すことは、beforeRouteEnter 内で使用される場合にのみ有効です。 ! ! beforeRouteEnter (to、from、next) { 次(vm => { // `vm` 経由でコンポーネントインスタンスにアクセスします}) }
ルートが変更され、コンポーネントが使用されるときに呼び出されます 定数ユーザー = { テンプレート: `...`, ルート更新前(to、from、next) { // 現在のルートが変更されたがコンポーネントが再利用されたときに呼び出されます // たとえば、動的パラメータを持つパス /foo/:id の場合、/foo/1 と /foo/2 の間を移動すると、 // 同じ Foo コンポーネントがレンダリングされるため、コンポーネント インスタンスが再利用されます。この場合、このフックが呼び出されます。 // コンポーネントインスタンス `this` にアクセスできます } }
ナビゲーションがこのコンポーネントに対応するルートを離れたときに呼び出されます 定数ユーザー = { テンプレート: `...`, beforeRouteLeave(to, from, next) { // このコンポーネントの対応するルートから移動するときに呼び出されます // コンポーネントインスタンス `this` にアクセスできます } } ナビゲーション分析プロセス最初のアクセスルートの通常の実行順序
要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: HTML テーブルタグチュートリアル (26): セルタグ
>>: TLS暗号化通信を使用してDockerにリモート接続する詳細な例
<br />まず最初に、私はこのグループの中では完全な新人だということを述べなければなり...
Tensorflow バージョンと Cuda および CUDNN の対応: https://tens...
まずは効果の写真をお見せしましょう。 個人的には効果は問題ないと思います。アプリが写真を学習する時間...
ModSecurity は、Web サーバーに入るすべてのパケットをチェックする強力なパケット フィ...
HTML スタイル タグスタイルタグ - ドキュメント内でスタイルを宣言するときにこのタグを使用しま...
目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...
目次Vuex とは何ですか? Vuex 使用サイクル図私のストアディレクトリvuexの例の実装要約す...
目次1. マクロの観点からMySQLを分析する2. SQL ステートメントを実行するには、どの程度の...
序文コンポーネントは、非常に頻繁に使用されるものです。多くの人は、コンポーネントを 1 つのファイル...
目次PagodaをインストールするPythonランタイム環境を構成するPythonをインストールする...
目次$nextTick() $forceUpdate() $セット() .sync——2.3.0 以...
<br />今は情報爆発の時代であるだけでなく、サービス爆発の時代でもあります。それはす...
CSS によりプロセスナビゲーション効果を実現します。具体的な内容は以下のとおりです。 ::tip...
目次序文1. 理由: 2. 解決策のアイデア: 1. ローカル保存方法: 2. 実装手順: 3. 最...
目次なぜマテリアルライブラリが必要なのでしょうか?材質は何ですか?素材の種類fuep、vue3 ベー...