掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

Vue Router详解(原理、作用、用法)

Vue Router 是 Vue.js 官方的路由管理器,它允许用户在单页应用(SPA)中实现页面之间的导航。通过 Vue Router,开发者可以轻松地管理和组织应用中的多个视图,并且支持动态路由匹配、嵌套路由、编程式导航等功能。本文将详细介绍 Vue Router 的原理、作用以及具体用法,帮助读者全面理解和掌握这一强大的工具。

一、Vue Router 原理

1)基本概念

  1. 路由:路由是一种机制,用于根据不同的 URL 显示不同的内容或视图。

  2. 单页应用 (SPA):单页应用是一种 Web 应用程序架构,整个应用只有一个 HTML 页面,通过 JavaScript 动态更新内容,而不是重新加载整个页面。

2)工作原理

  1. Hash 模式:

使用 URL 中的 # 号来模拟一个完整的 URL,当 # 后面的内容改变时,浏览器不会向服务器发送请求,而是通过监听 hashchange 事件来触发路由变化。

例如:http://example.com/#/user/profile,其中 #/user/profile 是哈希部分。

  1. History 模式:

利用 HTML5 History API (pushState, replaceState) 来改变 URL 而不重新加载页面。

例如:http://example.com/user/profile,这种模式下的 URL 更加友好,但需要后端配置支持。

3)核心组件

  1. Router View:用于显示当前路由对应的组件。

  2. Router Link:用于创建链接,点击后会导航到指定的路由。

  3. Route:定义了路由的路径和对应的组件。

  4. Router:全局路由器对象,管理所有路由信息。

4)数据流

  1. 用户点击链接或执行编程式导航。

  2. Vue Router 监听并解析 URL。

  3. 根据 URL 匹配相应的路由规则。

  4. 更新 Router View 组件,渲染对应的视图。

二、Vue Router 作用

  1. 单页应用导航

允许用户在单页应用中进行页面间的无缝切换,提升用户体验。

通过动态路由匹配,可以根据 URL 参数的不同显示不同的内容。

  1. 路由参数传递

支持通过 URL 传递参数,如路径参数、查询参数等。

例如:/user/:id 和 /user?name=John。

  1. 嵌套路由

支持在路由中嵌套子路由,适用于复杂的多级视图结构。

例如:/user/profile/settings。

  1. 编程式导航

提供编程式导航方法,如 router.push, router.replace 等,可以在代码中控制路由跳转。

适用于需要根据某些条件或逻辑进行导航的情况。

  1. 导航守卫

提供多种导航守卫,如全局守卫、路由独享守卫、组件内守卫等,用于在导航过程中执行一些逻辑,如权限验证、页面加载前的数据获取等。

  1. 滚动行为

可以自定义滚动行为,如在导航时保持滚动位置或滚动到顶部。

三、Vue Router 用法

1)安装与引入

  1. 安装:

npm install vue-router
  1. 引入:

import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);

2)定义路由

  1. 创建路由配置:

const routes = [  { path: '/', component: Home },
  { path: '/about', component: About },
  { path: '/user/:id', component: User, props: true },
  {
    path: '/user',
    component: User,
    children: [      { path: 'profile', component: UserProfile },
      { path: 'settings', component: UserSettings }
    ]
  }
];
  1. 创建路由实例:

const router = new VueRouter({
  mode: 'history', // 或 'hash'
  base: process.env.BASE_URL,
  routes
});

3)使用路由

  1. 在主文件中引入路由实例:

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');
  1. 在模板中使用 <router-view> 和 <router-link>:

<template>
  <div id="app">
    <nav>
      <router-link to="/">Home</router-link>
      <router-link to="/about">About</router-link>
      <router-link :to="{ name: 'user', params: { id: 123 }}">User 123</router-link>
    </nav>
    <router-view></router-view>
  </div>
</template>

4)编程式导航

  1. 使用 router.push:

this.$router.push('/user/123');
  1. 使用 router.replace:

this.$router.replace({ name: 'user', params: { id: 123 } });
  1. 使用 router.go:

this.$router.go(-1); // 返回上一页

5)导航守卫

  1. 全局前置守卫:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!auth.isAuthenticated()) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      });
    } else {
      next();
    }
  } else {
    next();
  }
});
  1. 路由独享守卫:

const routes = [  {
    path: '/user',
    component: User,
    beforeEnter: (to, from, next) => {
      if (auth.isAuthenticated()) {
        next();
      } else {
        next('/login');
      }
    }
  }
];
  1. 组件内守卫:

export default {
  beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    next(vm => {
      // 通过 `vm` 访问组件实例
    });
  },
  beforeRouteUpdate(to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    next();
  },
  beforeRouteLeave(to, from, next) {
    // 导航离开该组件的对应路由时调用
    next();
  }
};

6)滚动行为

  1. 自定义滚动行为:

const router = new VueRouter({
  mode: 'history',
  routes,
  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition;
    } else {
      return { x: 0, y: 0 };
    }
  }
});

7)懒加载

  1. 按需加载路由组件:

const routes = [
  { path: '*', component: NotFoundComponent }
];

8)动态路由匹配

  1. 通配符路由:

const routes = [  { path: '*', component: NotFoundComponent }
];
  1. 正则表达式匹配:

const routes = [  { path: '/user-:id(\\d+)', component: User }
];

四、常见问题及解决方案

1)刷新页面后 404 错误

  1. 原因:在 History 模式下,直接访问某个路径可能会导致 404 错误,因为服务器没有找到对应的资源。

  2. 解决方法:配置服务器,在找不到资源时返回 index.html 文件。

  3. Nginx 配置:

location / {
  try_files $uri $uri/ /index.html;
}
  1. Apache 配置:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

2)路由参数传递和接收

  1. 传递参数:

this.$router.push({ name: 'user', params: { id: 123 } });
  1. 接收参数:

export default {
  created() {
    console.log(this.$route.params.id);
  }
};

3)路由守卫中的异步操作

  1. 异步操作示例:

router.beforeEach(async (to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    const isAuthenticated = await auth.checkAuthentication();
    if (isAuthenticated) {
      next();
    } else {
      next('/login');
    }
  } else {
    next();
  }
});

4)嵌套路由的命名和重定向

  1. 命名路由:

const routes = [  {
    path: '/user',
    component: User,
    children: [      { path: 'profile', name: 'user-profile', component: UserProfile },
      { path: 'settings', name: 'user-settings', component: UserSettings }
    ]
  }
];
  1. 重定向:

const routes = [  {
    path: '/user',
    component: User,
    children: [      { path: '', redirect: 'profile' },
      { path: 'profile', component: UserProfile },
      { path: 'settings', component: UserSettings }
    ]
  }
];

Vue Router详解(原理、作用、用法)

Vue Router 是一个强大且灵活的路由管理工具,广泛应用于 Vue.js 单页应用中。通过本文的介绍,读者应该能够理解 Vue Router 的基本原理、主要作用以及具体的用法。从安装配置到高级功能,Vue Router 提供了丰富的功能和选项,帮助开发者构建高效、易维护的 Web 应用。希望本文能为读者提供有价值的参考和指导,助力大家更好地利用 Vue Router 进行项目开发。

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 全球天气预报

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

  • 购物小票识别

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

  • 涉农贷款地址识别

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

  • 人脸四要素

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

  • 个人/企业涉诉查询

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future