vue项目如何去掉URL中#符号的方法

yizhihongxing

Vue.js是一个采用渐进式开发的JavaScript框架,路由系统使用的是Vue Router,该路由系统默认使用URL中的 "#"(hash) 字符来控制页面的跳转。但是,在某些场景下,我们想要去掉URL中的 # 符号。这里提供两种去掉 URL 中 # 符号的方法。

方法一:使用HTML5 History模式

HTML5 History模式会使用HTML5 History API来操作路由,它通过修改URL中的路径来实现路由的切换,同时为了保证用户体验,在浏览器不支持HTML5 History API的情况下,自动降级为使用hash模式。在Vue.js中,我们可以通过配置Vue Router来开启HTML5 History模式。具体步骤如下:

1. 在router.js中配置mode为history模式

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    }
  ]
})

2. 为应用程序配置404页面

当进行页面跳转时,如果找不到对应的路由,则会进入到404页面。对于使用HTML5 History模式的Vue应用程序,需要配置404页面,否则直接通过URL访问路由时可能会直接返回404错误。可以在router.js文件中添加如下代码:

export default new Router({
  mode: 'history',
  routes: [
    // 添加404页面路由
    {
      path: '*',
      name: '404',
      component: () => import('@/views/404.vue')
    },
    ...
  ]
})

3. 配置服务器

需要确保在服务器上,无论用户访问的是哪个路由,在返回HTML文件时都要返回同一个文件,这就需要对服务器进行一下配置。

  • 对于Apache服务器,需要开启mod_rewrite扩展模块,并在.htaccess文件中添加如下规则:
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>
  • 对于Nginx服务器,需要在服务器配置文件中添加如下代码:
server {
  ...
  location / {
    try_files $uri $uri/ /index.html;
  }
  ...
}

方法二:修改默认Vue配置

我们还可以通过修改默认Vue配置来实现去掉URL中 # 符号的效果。

1. 在main.js中配置路由的默认后缀为html

import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false

// 配置路由的默认后缀为html
Vue.prototype.$routerReplace = function(to) {
  const found = String(router.history.basePath + to)
  window.location.replace(found.endsWith('.html') ? found : found + '.html')
}

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

2. 修改router.js中Router原型对象下的replace方法,调用Vue.prototype.$routerReplace来跳转路由

Vue.use(Router)

// 修改replace方法
Router.prototype.replace = function replace(location, onComplete, onAbort) {
  const lastRoute = this.currentRoute
  this.history.replace(location, onComplete, function onReady() {
    const route = this.currentRoute
    if (route.matched.length === 0) {
      // not_found页面,防止进入死循环
      this.replace(lastRoute.fullPath || '/')
    }
    // 调用Vue.prototype.$routerReplace来跳转路由
    Vue.prototype.$routerReplace(route.fullPath)
    onComplete && onComplete(route)
  }, onAbort)
}

3. 修改router.js中Router原型对象下的push方法,调用Vue.prototype.$routerReplace来跳转路由

Vue.use(Router)

// 修改push方法
Router.prototype.push = function push(location, onComplete, onAbort) {
  const lastRoute = this.currentRoute
  this.history.push(location, onComplete, function onReady() {
    const route = this.currentRoute
    if (route.matched.length === 0) {
      // not_found页面,防止进入死循环
      this.replace(lastRoute.fullPath || '/')
    }
    // 调用Vue.prototype.$routerReplace来跳转路由
    Vue.prototype.$routerReplace(route.fullPath)
    onComplete && onComplete(route)
  }, onAbort)
}

这样配置之后,就可以实现不需要 # 符号的URL路由效果。

示例

此处提供两个示例,一个采用HTML5 History模式,另一个是通过修改默认Vue配置来实现的。

采用HTML5 History模式

可以参考官方文档进行配置,具体步骤如下:

  1. 在router.js中配置mode为history模式
  2. 为应用程序配置404页面
  3. 配置服务器

修改默认Vue配置

可以在main.js和router.js中进行配置,具体步骤如下:

  1. 在main.js中配置路由的默认后缀为html
  2. 修改router.js中Router原型对象下的replace方法,调用Vue.prototype.$routerReplace来跳转路由
  3. 修改router.js中Router原型对象下的push方法,调用Vue.prototype.$routerReplace来跳转路由

这两种方法都可以实现去掉URL中 # 符号的效果,具体选择哪种方法要根据实际情况来决定。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue项目如何去掉URL中#符号的方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 前端需知nodejs express中间件使用及定义详解

    前置知识 在学习本篇攻略之前,需要你对以下内容有一定的了解: Node.js基础概念 Node.js中间件原理及分类 Express基础概念和使用 什么是中间件 在Express中,一个请求从进入应用到返回响应的整个过程中,可以被看做是一系列的中间件函数依次执行的过程。其中的每一个中间件函数完全可以通过req,res, next这三个参数实现功能,同时以一个…

    Vue 2023年5月27日
    00
  • Vue实现预览文件(Word/Excel/PDF)功能的示例代码

    下面是Vue实现预览不同类型文件的示例代码的完整攻略: 1. 准备工作 在Vue的项目中,要实现文件预览功能,需要安装和引用一些第三方库:- file-saver库,用于在前端将文件保存到本地;- axios库,用于发送请求到后端获取文件数据;- jszip库,用于解压缩zip文件;- pdf.js库,用于预览PDF文件。 可以使用npm来安装这些库: np…

    Vue 2023年5月28日
    00
  • 详解vue-cli多页面工程实践

    详解vue-cli多页面工程实践 简介 在实际项目中,往往需要构建多页应用来满足不同的功能需求。本文将详细介绍如何使用vue-cli构建多页应用。 准备工作 安装node.js 安装vue-cli 创建工程 打开终端,执行以下命令来创建vue-cli的多页应用工程: vue init webpack my-project 这里将工程命名为my-project…

    Vue 2023年5月27日
    00
  • 如何使用 vue-cli 创建模板项目

    当您开始使用Vue.js开发项目时,使用vue-cli来创建模板项目将是一种非常有效的方式。下面将详细讲解如何使用vue-cli来创建基本的Vue.js项目模板。 步骤一:安装vue-cli 首先需要确保您的系统中已经安装了Node.js和npm。打开终端并执行以下命令安装vue-cli: npm install -g vue-cli 步骤二:创建一个新项目…

    Vue 2023年5月27日
    00
  • js中less常用的方法小结

    JS中Less常用的方法小结 1. Less和CSS变量 我们都知道,CSS中 var() 函数是用来引用自定义变量的。在Less中,我们可以使用和CSS类似的方式来定义和使用变量。下面是Less的变量定义示例: @base-color: #666; body { color: @base-color; background-color: lighten(@…

    Vue 2023年5月28日
    00
  • Vue获取表单数据的方法

    当使用Vue开发Web应用时,我们经常需要从表单中获取用户输入的数据。下面是几种Vue获取表单数据的方法的完整攻略: 1.使用v-model指令获取表单数据 我们可以在表单元素上使用v-model指令,Vue会自动为我们管理和更新表单元素的值。要使用v-model指令获取表单值,我们需要为表单元素绑定v-model指令,将其值绑定到Vue组件实例中的一个属性…

    Vue 2023年5月27日
    00
  • vue中的vendor.js文件过大问题及解决

    问题描述: 在使用 Vue 应用构建时,有时会遇到 vendor.js 文件过大的问题,导致应用加载速度缓慢,用户体验受到影响,那么如何解决这个问题呢? 问题分析: Vue 应用在打包的时候,会抽取第三方库和模块到一个名为 vendor.js 的文件中,这个文件包含了所有在项目中被使用的第三方库和模块,如果这些库和模块很多,那么 vendor.js 文件会变…

    Vue 2023年5月28日
    00
  • 浅谈Vue响应式(数组变异方法)

    浅谈Vue响应式(数组变异方法) 什么是Vue响应式 Vue.js是一款轻量级的、渐进式的JavaScript框架,它采用数据驱动视图的思想,通过对数据的绑定,前端开发者可以更加方便的进行数据的处理和控制。Vue.js的核心理念是响应式编程,也就是当数据发生变化时,我们的视图会自动更新。 数组变异方法 Vue将一些常用的JavaScript数组操作方法进行了…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部