vue3中路由hash与History的设置

本文详细介绍了Vue Router中history和hash模式的工作原理、特点及配置方法,重点讲解了如何创建无#的美观URL和处理刷新时的404问题,以及hash模式的监听和页面跳转操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1、history 关键字:createWebHistory

import { createRouter, createWebHistory } from 'vue-router'
const routes = [ {
  path: '/userinfo',
  name: 'UserInfo',
  component: () => import('../views/UserInfo.vue')
}]
const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})
export default router

 history模式直接指向history对象,它表示当前窗口的浏览历史,history对象保存了当前窗口访问过的所有页面网址。URL中没有#,它使用的是传统的路由分发模式,即用户在输入一个URL时,服务器会接收这个请求,并解析这个URL,然后做出相应的逻辑处理。

特点:

当使用history模式时,URL就像这样:hhh.com/user/id。相比hash模式更加好看。

虽然history模式不需要#。但是,它也有自己的缺点,就是在刷新页面的时候,如果没有相应的路由或资源,就会刷出404来。

history api可以分为两大部分,切换历史状态 和 修改历史状态:

修改历史状态:

包括了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法,这两个方法应用于浏览器的历史记录栈,提供了对历史记录进行修改的功能。只是当他们进行修改时,虽然修改了url,但浏览器不会立即向后端发送请求。如果要做到改变url但又不刷新页面的效果,就需要前端用上这两个API。

切换历史状态:

包括forward()、back()、go()三个方法,对应浏览器的前进,后退,跳转操作。

配置:

想要设置成history模式,就要进行以下的配置(后端也要进行配置):

const router = new VueRouter({
  mode: 'history',
  routes: [...]
})

2、hash 关键字:createWebHashHistory

import { createRouter, createWebHashHistory } from 'vue-router'
const routes = [{
  path: '/userinfo',
  name: 'UserInfo',
  component: () => import('../views/UserInfo.vue')
}]
const router = createRouter({
  history: createWebHashHistory(),
  routes
})
export default router

hash模式是开发中默认的模式,也称作锚点,它的URL带着一个#,例如:www.abc.com/#/vue,它的hash值就是#/vue。

特点:

hash值会出现在URL里面,但是不会出现在HTTP请求中,对后端没有影响。所以改变hash值不会重新加载页面。

这种模式的浏览器支持度很好,低版本的IE浏览器也支持这种模式。

hash路由被称为是前端路由,已经成为SPA(单页面应用)的标配。

 原理:

 hash模式的主要原理就是onhashchange()事件:

window.onhashchange = function(event){
    console.log(event.oldURL, event.newURL);
    let hash = location.hash.slice(1);
}

 使用onhashchange()事件的好处就是,在页面的hash值发生变化时,无需向后端发起请求,window就可以监听事件的改变,并按规则加载相应的代码。除此之外,hash值变化对应的URL都会被浏览器记录下来,这样浏览器就能实现页面的前进和后退。虽然是没有请求后端服务器,但是页面的hash值和对应的URL关联起来了。

 获取页面hash变化的方法:

 

// 监听,当路由发生变化的时候执行
watch: {
  $route: {
    handler: function(val, oldVal){
      console.log(val);
    },
    // 深度观察监听
    deep: true
  }
},

<think>好的,我现在需要为用户介绍Vue中的路由。首先,我得回忆一下Vue Router的基本概念和作用。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。单页面应用的特点是用户在不重新加载页面的情况下切换视图,这就需要前端路由来管理不同的URL和组件的映射关系。 接下来,我应该分步骤来组织内容,确保结构清晰。首先,需要解释为什么需要路由,然后介绍Vue Router的核心概念,比如路由配置、动态路由、嵌套路由、导航守卫等。同时,还要提到一些常用的功能,比如编程式导航、路由参数传递以及懒加载优化。 用户可能对基本用法比较感兴趣,所以我应该从安装和基本配置开始。例如,通过npm安装Vue Router,然后在主文件中引入并使用它。给出一个简单的路由配置示例,展示如何将路径映射到组件。此外,需要说明如何在Vue组件中使用`<router-link>`和`<router-view>`来实现导航和视图渲染。 动态路由匹配也是一个重要部分。需要解释如何通过冒号(:)来定义动态路径参数,例如`/user/:id`,并如何在组件中通过`$route.params.id`来获取参数。可能还需要提到响应路由参数变化的问题,以及使用watch或导航守卫来处理参数变化的情况。 嵌套路由的使用场景和配置方法也需要说明。比如,在用户界面中,可能有侧边栏和主要内容区域,这时候可以通过嵌套路由来组织子组件。给出一个嵌套路由的配置示例,展示children属性的用法。 导航守卫部分比较复杂,但很重要。需要介绍全局前置守卫、路由独享守卫和组件内守卫的不同用途,比如权限验证、页面标题修改等。举例说明如何使用`router.beforeEach`来检查用户是否登录,如果没有则重定向到登录页面。 编程式导航也是一个常用功能,比如在方法中使用`this.$router.push`来跳转页面,这比声明式的`<router-link>`更灵活。需要对比这两种方式的适用场景,并给出代码示例。 另外,路由的懒加载对于性能优化很关键,尤其是在大型应用中。需要解释如何通过动态import语法来实现按需加载组件,减少初始加载时间。 最后,可以简要提及路由的模式,比如hash模式和history模式的区别,以及如何根据服务器配置选择合适的模式。可能还需要提到在部署时如何处理history模式的服务器配置问题,避免出现404错误。 在整理这些内容时,要确保术语准确,示例代码正确,并且符合用户的实际使用场景。同时,要避免过于深入高级主题,保持介绍的基础性和实用性。如果用户有进一步的问题,可以再深入展开某个具体部分。现在,把这些点组织成一个结构清晰的回答,分点介绍,帮助用户逐步理解Vue Router的核心概念和用法。</think>### Vue 路由(Vue Router)介绍 Vue Router 是 Vue.js 官方的**路由管理库**,用于构建**单页面应用(SPA)**。它通过 URL 组件的动态映射,实现页面无刷新切换,同时支持嵌套路由、导航守卫、懒加载等特性。 --- #### 一、核心概念 1. **路由配置** - 定义路径(`path`)组件(`component`)的映射关系。 - 示例: ```javascript const routes = [ { path: &#39;/&#39;, component: Home }, { path: &#39;/about&#39;, component: About } ]; ``` 2. **动态路由** - 通过冒号 `:` 匹配动态参数: ```javascript { path: &#39;/user/:id&#39;, component: User } ``` - 组件内获取参数: ```javascript this.$route.params.id // 如获取 /user/123 中的 123 ``` 3. **嵌套路由** - 使用 `children` 配置子路由,父组件需包含 `<router-view>`: ```javascript { path: &#39;/parent&#39;, component: Parent, children: [ { path: &#39;child&#39;, component: Child } ] } ``` --- #### 二、核心功能 1. **导航方式** - **声明式导航**:通过 `<router-link>` 生成链接: ```html <router-link to="/about">关于</router-link> ``` - **编程式导航**:通过 `router.push` 跳转: ```javascript this.$router.push(&#39;/about&#39;); ``` 2. **导航守卫** - 控制路由跳转逻辑: - **全局守卫**:`router.beforeEach`(权限验证) - **路由独享守卫**:`beforeEnter` - **组件内守卫**:`beforeRouteEnter` ```javascript router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isLoggedIn) next(&#39;/login&#39;); else next(); }); ``` 3. **路由懒加载** - 优化性能,按需加载组件: ```javascript const User = () => import(&#39;./User.vue&#39;); ``` --- #### 三、基础使用步骤 1. **安装** ```bash npm install vue-router@4 ``` 2. **初始化路由** ```javascript import { createRouter, createWebHistory } from &#39;vue-router&#39;; const router = createRouter({ history: createWebHistory(), routes // 传入定义的路由配置 }); ``` 3. **挂载到Vue实例** ```javascript const app = createApp(App); app.use(router); app.mount(&#39;#app&#39;); ``` 4. **在组件中使用** ```html <!-- 导航 --> <router-link to="/">首页</router-link> <!-- 路由出口 --> <router-view></router-view> ``` --- #### 四、路由模式 1. **Hash模式** - URL 带 `#`,兼容性好(默认模式): ```javascript createWebHashHistory() ``` 2. **History模式** - 需要服务器支持(如Nginx配置): ```javascript createWebHistory() ``` --- #### 五、常见场景 1. **页面权限控制** 通过导航守卫拦截未登录用户: ```javascript router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !auth.isLoggedIn()) next(&#39;/login&#39;); else next(); }); ``` 2. **路由传参** - 通过 `params`: ```javascript this.$router.push({ name: &#39;user&#39;, params: { id: 1 } }); ``` - 通过 `query`: ```javascript this.$router.push({ path: &#39;/user&#39;, query: { id: 1 } }); ``` --- #### 总结 Vue Router 通过管理 URL 组件的映射,为 SPA 提供完整的路由解决方案。掌握路由配置、导航守卫、懒加载等核心功能,能够高效实现页面跳转、权限控制及性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端程序猿i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值