検索
ホームページウェブフロントエンドフロントエンドQ&AVue のナビゲーション ガードとは何ですか?

ナビゲーション ガードには次のものが含まれます: 1. グローバル プレガード "beforeEach"; 2. グローバル解析ガード "beforeResolve"; 3. ルート専用ガード "beforeEnter"; 4. コンポーネント内のガード "beforeRouteEnter"、" beforeRouteLeave」。

Vue のナビゲーション ガードとは何ですか?

このチュートリアルの動作環境: Windows7 システム、vue2.9.6 バージョン、DELL G3 コンピューター。

vue-router が提供するナビゲーション ガードは、主にジャンプやキャンセルによるナビゲーションのガードに使用されます。ルート ナビゲーション プロセスを組み込む機会は複数あります。グローバル、単一ルート専用、またはコンポーネント レベルです。

パラメータやクエリを変更しても、開始/終了ナビゲーション ガードはトリガーされないことに注意してください。 $route オブジェクトを監視するか、コンポーネント内ガード beforeRouteUpdate を使用することで、これらの変更に対応できます。

グローバル フロント ガード

router.beforeEach を使用してグローバル フロント ガードを登録できます:

const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
  // ...
})

ナビゲーションがトリガーされると、グローバル フロント ガードがGuard セットされたガードは、作成された順序で呼び出されます。ガードは非同期で解析および実行されます。この時点で、ナビゲーションはすべてのガードが解決されるまで待機します。

各ガード メソッドは 3 つのパラメータを受け取ります:

  • to: Route: 入力されるターゲット ルーティング オブジェクト

  • from: Route: 現在のナビゲーションが出発しようとしているルート

  • next: 機能: このフックを解決するには、このメソッドを呼び出す必要があります。実行効果は、次のメソッドの呼び出しパラメータによって異なります。

    • next(): パイプラインの次のフックに進みます。すべてのフックが実行されると、ナビゲーションのステータスが確認されます。

    • next(false): 現在のナビゲーションを中断します。ブラウザの URL が変更されると (おそらくユーザーが手動で、またはブラウザの [戻る] ボタンによって)、URL アドレスは from ルートに対応するアドレスにリセットされます。

    • next('/') または next({ path: '/' }): 別のアドレスにジャンプします。現在のナビゲーションが中断され、新しいナビゲーションが開始されます。任意の場所オブジェクトを next に渡すことができ、replace: true、name: 'home' などのオプション、および prop または router.push へのルーターリンクで使用されるオプションを設定することができます。

    • next(error): (2.4.0) next に渡されたパラメータが Error インスタンスの場合、ナビゲーションは終了し、エラーは router.onError() に渡されます。登録されたコールバック。

# 次の関数が特定のナビゲーション ガード内で 1 回だけ呼び出されることを確認します。これは複数回出現できますが、すべての論理パスが重複していない場合に限ります。そうでない場合、フックは解析されないか、エラーが報告されます。ユーザーが認証に失敗した場合に /login にリダイレクトする例を次に示します。

// BAD
router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  // 如果用户未能验证身份,则 `next` 会被调用两次
  next()
})
// GOOD
router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  else next()
})

Global Resolution Guard

New in 2.5.0

2.5.0 では、router.beforeResolve を使用してグローバル ガードを登録できます。これは、ナビゲーションが確認される前、およびすべてのコンポーネント内ガードと非同期ルート コンポーネントが解析された後に解析ガードが呼び出される点を除いて、router.beforeEach に似ています。

ルーティング専用ガード

ルーティング設定で beforeEnter ガードを直接定義できます:

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

これらのガードとグローバル プレガードのメソッドパラメータは同じです。

コンポーネント内のガード

最後に、次のルート ナビゲーション ガードをルーティング コンポーネント内で直接定義できます:

  • beforeRouteEnter

  • beforeRouteUpdate (2.2 の新機能)

  • beforeRouteLeave

const Foo = {
  template: `...`,
  beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate(to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave(to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }
}

beforeRouteEnter ガードはアクセスできませんこれは、ナビゲーションが確認される前にガードが呼び出されるため、これから登場する新しいコンポーネントはまだ作成されていません。

ただし、コールバックを next に渡すことでコンポーネント インスタンスにアクセスできます。ナビゲーションを確認したらコールバックを実行し、コールバックメソッドのパラメータとしてコンポーネントインスタンスを渡します。

beforeRouteEnter (to, from, next) {
  next(vm => {
    // 通过 `vm` 访问组件实例
  })
}

beforeRouteEnter は、next へのコールバックの受け渡しをサポートする唯一のガードであることに注意してください。 beforeRouteUpdate と beforeRouteLeave の場合、これはすでに利用可能であるため、コールバックの受け渡しは必要ないためサポートされていません。

beforeRouteUpdate (to, from, next) {
  // just use `this`
  this.name = to.params.name
  next()
}

この離脱ガードは通常、ユーザーが変更を保存する前に突然離脱することを防ぐために使用されます。このナビゲーションは next(false) でキャンセルできます。

beforeRouteLeave (to, from, next) {
  const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
  if (answer) {
    next()
  } else {
    next(false)
  }
}

ナビゲーション解析プロセスを完了

  • ナビゲーションがトリガーされます。

  • 非アクティブ化されたコンポーネントで beforeRouteLeave ガードを呼び出します。

  • 各ガードの前にグローバルを呼び出します。

  • 再利用されたコンポーネントで beforeRouteUpdate ガード (2.2) を呼び出します。

  • ルーティング設定に入る前に呼び出します。

  • 非同期ルーティング コンポーネントを解決します。

  • アクティブ化されたコンポーネントのRouteEnterの前に呼び出します。

  • グローバル beforeResolve ガード (2.5) を呼び出します。

  • #ナビゲーションを確認しました。

  • グローバル afterEach フックを呼び出します。

  • DOM 更新をトリガーします。

  • beforeRouteEnter ガードで next に渡されるコールバック関数を呼び出すと、作成されたコンポーネント インスタンスがコールバック関数のパラメータとして渡されます。

[関連する推奨事項:「vue.js チュートリアル」]

以上がVue のナビゲーション ガードとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
ReactのSEOに優しい性質:検索エンジンの可視性の向上ReactのSEOに優しい性質:検索エンジンの可視性の向上Apr 26, 2025 am 12:27 AM

はい、Reactapplicationscanbeseo-frendlywithpropertrategies.1)useServer-siderendering(ssr)withtoolslikenext.jstogeneratefullhtmlforindexing.2)explmentStaticSiteSite-generation(SSG)forcontent-heavysitestoprededopRederpageattiTiTeTietLe.3)

Reactのパフォーマンスボトルネック:遅いコンポーネントの識別と最適化Reactのパフォーマンスボトルネック:遅いコンポーネントの識別と最適化Apr 26, 2025 am 12:25 AM

反応性能のボトルネックは、主に非効率的なレンダリング、不必要な再レンダリング、コンポーネントの内部重量の計算によって引き起こされます。 1)ReactDevtoolsを使用して遅いコンポーネントを見つけ、React.Memoの最適化を適用します。 2)EFFECTを最適化して、必要に応じて実行することを確認します。 3)メモリ処理には、usememoとusecallbackを使用します。 4)大きなコンポーネントを小さなコンポーネントに分割します。 5)ビッグデータリストについては、仮想スクロールテクノロジーを使用してレンダリングを最適化します。これらの方法により、Reactアプリケーションのパフォーマンスを大幅に改善できます。

Reactの代替品:他のJavaScriptUIライブラリとフレームワークの探索Reactの代替品:他のJavaScriptUIライブラリとフレームワークの探索Apr 26, 2025 am 12:24 AM

パフォーマンスの問題、学習曲線、またはさまざまなUI開発方法の探索のために、誰かが反応する代替品を探すことができます。 1)Vue.JSは、統合の容易さと軽度の学習曲線で称賛され、小規模および大規模なアプリケーションに適しています。 2)AngularはGoogleによって開発されており、強力なタイプのシステムと依存噴射を備えた大規模なアプリケーションに適しています。 3)Svelteは、ビルド時に効率的なJavaScriptにコンパイルすることにより、優れたパフォーマンスとシンプルさを提供しますが、そのエコシステムはまだ成長しています。代替案を選択するときは、プロジェクトのニーズ、チームエクスペリエンス、プロジェクトの規模に基づいて決定する必要があります。

Keys and Reactの調整アルゴリズム:パフォーマンスの向上Keys and Reactの調整アルゴリズム:パフォーマンスの向上Apr 26, 2025 am 12:21 AM

KeysinReactarespecialattributedignedInedInementionArrays forStableIdentity、重要なもの、curtialforthereconciliationalgorithmはfichupdatedoMedifficly.1)keyshelpreprackChanges、追加、OrRemovalsinlists.2)

Reactプロジェクトに必要なボイラープレートコード:セットアップオーバーヘッドの削減Reactプロジェクトに必要なボイラープレートコード:セットアップオーバーヘッドの削減Apr 26, 2025 am 12:19 AM

toreduceSetUpOverHeadinReactProjects、usetoolslikecreatereActapp(cra)、next.js、gatsby、orstarterkits、およびmaintainAmodularStructur E.1)crasimplifiessetupwithasinglecommand.2)next.jsandgatsbyoffermorefeaturesbutalearningcurve.3)starterkitsprovidecomprehensi

USESTATEの理解():React React Neact State Managementの包括的なガイドUSESTATEの理解():React React Neact State Managementの包括的なガイドApr 25, 2025 am 12:21 AM

usestate()isareacthookusedtomeStateinfunctionalComponents.1)itInitializeSandUpDatestate、2)colledatttheToplevelofComponents、3)canleadto'stalestate'ifnotusedly、and4)cancancancancancanbeoptimizeduptimizeduptimizedususecall -calleSuperesteSteSteSteSteSteSteSteSteStateSupteStateSuptateSuptatedates

Reactを使用することの利点は何ですか?Reactを使用することの利点は何ですか?Apr 25, 2025 am 12:16 AM

ReactisPopularduetoitsComponent Architecture、Virtualdom、Richecosystem、およびdeclarativenature.1)コンポーネントベースのarchitectureallowsforReusable anduipieces、改善様式および測定可能性。

Reactでのデバッグ:一般的な問題の特定と解決Reactでのデバッグ:一般的な問題の特定と解決Apr 25, 2025 am 12:09 AM

debugReactapplicationivivivity、EtheseStrategies:1)AddressPropdrillingWithContextapiorredux.2)HandLeasynchronousoperations withuthutateanduseeffect、Abortcontrollertopreventraceconditions.3)最適化合物を使用して、最適化合物を使用してください

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール