vue-router 去掉#

本文详细讲解如何在Vue项目中使用history路由模式,并解决由此带来的404问题,通过正确配置Nginx避免刷新页面出现错误。同时,解决在嵌套路由下图片加载失败的问题。

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

  vue-router默认的路由模式是hash,我们要去掉url中的#需要将路由模式切换为history

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

  这样子,url中的#就可以去掉了,在开发环境下不会出问题,部署上线后点击正常,但是...你一旦手动点击浏览器的刷新按钮,页面显示nginx的404页面。

  怎么解决呢?在vue-router官网有说明:这种模式还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。

  所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。我们线上的服务器用的是nginx,需要改为下面的配置:

# 项目部署在服务器/test目录下(访问地址:http://www.a.com/test)

location ^~/test {
     alias   D:/project/card-web/code/dist/;
     try_files  $uri $uri/ @card;
     access_log  logs/card_web.access.log ;
     error_log  logs/card_web.error.log ;
 }
        
 location @card {
     rewrite ^/(test)/(.+)$ /$1/index.html last;
 }
      
# 项目部署在服务器/下
(访问地址:http://www.a.com)
 location / {
     root   D:/project/card-web/code/dist/;
     index  index.html index.htm;
     try_files $uri $uri/ /index.html;
 }

 

  这样子,无论你怎么刷新页面都不会报404了。。。贼开心。。。

  然而,点进去一个二级路由发现,页面中的图片全都没有加载成功。。。vue-router官网有这么一句话:要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径。

  我页面中是这么写的:

<img :src="`./static/image/real-time-monitoring/online-line.png`"
         alt="" class="line-img line-rotation">

  f12后发现,浏览器的请求路径是:

Request URL: http://localhost:8080/cardapp/card/static/image/real-time-monitoring/online-line.png

  我的路由:

{
          path: '/cardapp',
          component: CardApp,
          name: 'cardapp',
          children:[
            { path: 'card', component: add}
          ]
}

  解决办法:

<img :src="`/static/image/real-time-monitoring/online-line.png`"
         alt="" class="line-img line-rotation">

  原因:这图片处在嵌套路由下,这个嵌套路由以 / 开头,会被当做根路径,之前写的相对路径会拼接到这个嵌套路由下,所有会出现图片路径会加上当前路由了。

转载于:https://www.cnblogs.com/hanshuai/p/9930063.html

### 卸载 `vue-router` 插件的方法 要卸载 `vue-router` 插件,可以通过以下方式完成: #### 1. 使用包管理器卸载 如果项目中使用的是 npm 或 yarn 来安装依赖,则可以分别执行以下命令来移除 `vue-router`。 对于 **npm** 用户: ```bash npm uninstall vue-router ``` 对于 **yarn** 用户: ```bash yarn remove vue-router ``` 这将从项目的 `package.json` 和实际的 `node_modules` 中删除 `vue-router` 及其相关内容[^2]。 --- #### 2. 删除相关代码 除了卸载依赖外,还需要清理掉项目中与 `vue-router` 相关的代码部分。以下是具体操作步骤: - **删除路由配置文件** 如果存在单独的路由配置文件(通常命名为 `router/index.js`),可以直接将其删除或者清空其中的内容。 - **修改入口文件 (`main.js`)** 在入口文件中,可能有类似以下的代码引入并注册了 `vue-router` 的实例: ```javascript import Vue from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import router from &#39;./router&#39;; // 移除此行 Vue.config.productionTip = false; new Vue({ router, // 移除此字段 render: h => h(App), }).$mount(&#39;#app&#39;); ``` 需要确保删除所有关于 `router` 的导入以及传递给 `new Vue()` 实例的相关参数[^3]。 --- #### 3. 清理缓存 (可选) 为了防止旧版本的模块残留影响后续运行效果,在某些情况下建议清除本地缓存后再重新启动开发环境。 针对 **npm** 用户: ```bash npm cache clean --force ``` 针对 **yarn** 用户: ```bash yarn cache clean ``` 之后再次尝试构建应用即可验证是否成功去除 `vue-router` 功能支持。 --- ### 注意事项 当完全去掉导航功能后,需考虑页面跳转逻辑如何实现替代方案;另外如果是大型复杂工程则更应该谨慎处理以免破坏现有业务流程结构稳定性等问题发生。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值