vue-router如何实现history模式配置

 更新时间:2022年06月24日 10:05:45   作者:注释科长  
这篇文章主要介绍了vue-router如何实现history模式配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue-router history模式配置

一:概述

vue-router可以设置两种模式:hash和history

const router = new VueRouter({ 
  mode: "hash", 
  // mode: "history", 
  routes 
});

如果使用hash模式,一般无需特殊配置;

但如果要使用history模式,则前端和服务端要做一定的设置;

使用history模式通常本地调试没有什么问题,但是一旦发布到测试或生产环境,则会出现页面白屏或者刷新页面白屏的现象,这种问题的出现是因为前端和服务端没有做相应的配置。

二、实现history模式需要怎样配置

2.1、前端配置

首先要设置路由的mode和base两个值,如下:

const routes = [...] 
const router = new VueRouter({
  mode: "history",
  base: process.env.BASE_URL,  // 如果使用history模式,必须设置base参数
  routes
});
 
export default router;

其次要设置vue.config.js里的publicPath,如下:

module.exports = {
  // publicPath默认值是'/',即你的应用是被部署在一个域名的根路径上
  // 设置为'./',可以避免打包后的静态页面空白
  // 当在非本地环境时,这里以项目test-daily为例,即打包后的h5项目部署服务器的test-daily目录下
  // 那么这里就要把publicPath设置为/test-daily/,表示所有的静态资源都在/test-daily/里
  // 打包部署后,会发现index.html引用的静态资源都添加了路径/test-daily/
  publicPath: process.env.NODE_ENV == 'development' ? './' : '/test-daily/',  
  ...... 
}

如下图所示:

至此,前端的配置工作就结束了。

2.2、服务端配置(这里以nginx为例)

官网其实有介绍,只是不太详细,这里直接上代码,如下:

location /test-daily表示项目部署在了 /test-daily目录下,这里要跟vue.config.js里的publicpath的值保持一致。

之所以刷新页面白屏,其实是因为路由资源不存在,以本项目为例(home为首页路由的参数):

https://test.xxx.yy/test-daily/home

当访问上述路由时,其实根本就不存在相应的资源,当然会404了,为了避免这种情况的发生,可以让所有的路由都指向index.html就可以解决问题了

在nginx上进行设置: try_files $uri $uri/ /test-daily/index.html        即可。

至此,也就实现了所有的history模式的配置。

mode:“history“的作用

在未设置mode:“history”,vue的路由默认是hash模式,地址栏中显示如下:

hash:在地址栏中显示"#"符号(这里的hash不是密码学中的散列运算)。例如:localhost:8080/#/index,hash的值为#/index。它的特点在于:hash虽然出现在路径中,但是不会被包括在HTTP请求中,对后端完全没有影响,因此改变hash不会重新加载页面。

history利用了H5 history Interface中新增的pushState()和replaceState()方法。(需要特定浏览器支持)这两个方法应用于浏览器的历史记录栈,在当前已有的back、forward、go的基础上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的Url,但是浏览器不会立即向后端发送请求。

综上:hash模式和history模式都属于浏览器自身的特性,Vue-Router只是利用了这两个特性(通过调用浏览器提供的接口)来实现前端路由。

为了使路径更加直观及美观,就需要使用history模式。只需在router文件夹下的index.js中加入 mode:“history”

关于单页面交互跳转,只需要使用router提供的方法即可。

在main.js文件配置中将router绑定到全局

Vue.prototype.router = router;

跳转页面如下:

<button @click="toArticle()">跳转文章页面</button>
methods:{
    toArticle() {
        this.$router.push('/article')
    }
  }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • vue + element-ui实现简洁的导入导出功能

    vue + element-ui实现简洁的导入导出功能

    Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint UI,下面这篇文章主要给大家介绍了关于利用vue + element-ui如何实现简洁的导入导出功能的相关资料,需要的朋友可以参考下。
    2017-12-12
  • vue 监听窗口变化对页面部分元素重新渲染操作

    vue 监听窗口变化对页面部分元素重新渲染操作

    这篇文章主要介绍了vue 监听窗口变化对页面部分元素重新渲染操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue中的v-show,v-if,v-bind的使用示例详解

    vue中的v-show,v-if,v-bind的使用示例详解

    这篇文章主要介绍了vue中的v-show,v-if,v-bind的使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Vue build过程取消console debugger控制台信息输出方法详解

    Vue build过程取消console debugger控制台信息输出方法详解

    这篇文章主要为大家介绍了Vue build过程取消console debugger控制台信息输出方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • vue项目中字符串换行显示方式(返回的数据包含‘\r\n’字符)

    vue项目中字符串换行显示方式(返回的数据包含‘\r\n’字符)

    这篇文章主要介绍了vue项目中字符串换行显示方式(返回的数据包含‘\r\n’字符),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vuex数据持久化实现的思路与代码

    Vuex数据持久化实现的思路与代码

    Vuex数据持久化可以很好的解决全局状态管理,当刷新后数据会消失,这是我们不愿意看到的。这篇文章主要给大家介绍了关于Vuex数据持久化实现的思路与代码,需要的朋友可以参考下
    2021-05-05
  • vue3如何使用element-plus的dialog

    vue3如何使用element-plus的dialog

    这篇文章主要介绍了vue3优雅的使用element-plus的dialog,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • vue 解决provide和inject响应的问题

    vue 解决provide和inject响应的问题

    这篇文章主要介绍了vue 解决provide和inject响应的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • hansontable在vue中的基本使用教程

    hansontable在vue中的基本使用教程

    handsontable是目前在前端界最接近excel的插件,可以执行编辑,复制粘贴,插入删除行列,排序等复杂操作,这篇文章主要介绍了hansontable在vue中的基本使用,需要的朋友可以参考下
    2022-10-10
  • Vue项目打包并发布的完整步骤记录

    Vue项目打包并发布的完整步骤记录

    在一般情况下,vue项目代码部署发布只需将代码打包后直接上传到服务器即可,下面这篇文章主要给大家介绍了关于Vue项目打包并发布的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04

最新评论