技術共有

Vue におけるルート インターセプターの役割について詳しく説明しましょう

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Vue では、ルート インターセプターは主に、特定のルートに移動する前、または特定のルートから離れるときにインターセプトして処理するために使用されます。このメカニズムにより、開発者はルート ナビゲーションが発生する前または後に、権限の検証、データの読み込み、ページ ジャンプなどの特定のロジックを実行できます。

Vue Router では、ルート インターセプターは次の方法で実装できます。

  1. グローバルビフォーガード:

    • router.beforeEach(to, from, next): グローバルプレガードを登録すると、ルートナビゲーションがトリガーされると、ルートが変更される前にガードが呼び出されます。
    • 目的: グローバル権限の検証、ページ読み込みのプログレスバー制御などに適しています。
      1. router.beforeEach((to, from, next) => {
      2. // 检查用户权限
      3. if (!userAuthenticated) {
      4. next('/login'); // 未认证跳转到登录页
      5. } else {
      6. next(); // 已认证则放行
      7. }
      8. });

2.グローバルリゾルブガード:

  • router.beforeResolve(to, from, next): グローバル解析ガードを登録します。これは、グローバル フロント ガードの後、ナビゲーションが確認される前に呼び出されます。
    1. router.beforeResolve((to, from, next) => {
    2. // 在导航被确认之前,进行数据加载等操作
    3. fetchData().then(() => {
    4. next();
    5. });
    6. });

3. ルートごとのガード:

  • ルーティング設定オブジェクトに直接追加します。beforeEnter単一のルートにガード ロジックを追加するフィールド。
  1. const route = {
  2. path: '/profile',
  3. component: Profile,
  4. beforeEnter: (to, from, next) => {
  5. // 检查用户是否有权限访问该路由
  6. if (userHasAccess) {
  7. next();
  8. } else {
  9. next('/403'); // 没有权限跳转到403页面
  10. }
  11. }
  12. };

 

4.コンポーネント内ガード:

  • コンポーネント内で使用されるbeforeRouteEnterbeforeRouteUpdate、 そしてbeforeRouteLeaveフック関数。これらの関数は、ルートが現在のコンポーネントに移動するとき、現在のコンポーネントが再利用されるとき、および現在のコンポーネントが離れるときに呼び出されます。
  1. export default {
  2. beforeRouteEnter (to, from, next) {
  3. // 在路由导航进入该组件前执行逻辑
  4. next(vm => {
  5. // 可以访问实例 `vm`
  6. });
  7. },
  8. beforeRouteUpdate (to, from, next) {
  9. // 在当前路由改变,但是该组件被复用时调用
  10. // 可以访问组件实例 `this`
  11. // 通常用于更新组件的数据
  12. next();
  13. },
  14. beforeRouteLeave (to, from, next) {
  15. // 在导航离开该组件的对应路由时调用
  16. // 可以访问组件实例 `this`
  17. next();
  18. }
  19. }

これらのルート インターセプターのメカニズムは、開発者がさまざまなレベルやシナリオでアプリケーションのナビゲーション プロセスを制御し、権限制御、データのプリロード、ページ ジャンプなどの機能を実装するのに役立ち、それによってフロントエンド アプリケーションの対話型エクスペリエンスの管理と最適化が向上します。