Vue下路由History mode导致页面无法渲染的原因

Vue下路由History mode导致页面无法渲染的原因

用 Vue.js + vue-router 创建单页应用,是非常简单的。使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们。

一般开发的单页应用的URL都会带有#号的hash模式,因为整个应用本身而言就只有一个HTML,其他的都是通过router来渲染。如果因为业务需要,或者单纯是觉得带#号不美观,那么可以使用history模式,简单而言就是在router的配置文件index.js中添加如下一行代码:

history: mode
  • 1

没错,这样URL不再会有#号,你会发现整个地址栏回到了你熟悉的那个样子,不过,接下来介绍的就非常的重要了,可能很多刚入门的新人或多或少都会遇见这么一两个坑…

页面无法渲染

这里以我写的一个项目为例子,当我开启history模式的时候,我并没有对路由进行任何处理,在Dev阶段一切都是正常的,可是打包之后,访问项目路径:

sdp.driver.com/driver/

会发现页面一片空白,但是静态文件都能够正常的引用,因为使用了YII中的模块,所以除了域名之外,还会带有driver模块名。一般很多人创建的项目都放在了根目录下面,也就是:

sdp.driver.com

这样的一种形式,没问题。可是如果配置了模块,或者放置在了子文件夹下面,那么就会出问题。其实,这是因为router无法找到路径中的组件,所以也就无法渲染了。只需要修改router中的index.js,在每个path中加上你项目名称就行了,这样就能够成功了。

index.js

最后的页面效果:

效果图

404错误

在History mode下,如果直接通过地址栏访问路径,那么会出现404错误,这是因为这是单页应用(废话)…其实是因为调用了history.pushState API 所以所有的跳转之类的操作都是通过router来实现的,解决这个问题很简单,只需要在后台配置如果URL匹配不到任何静态资源,就跳转到默认的index.html。具体配置如下:

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

nginx

location / {
  try_files $uri $uri/ /index.html; }
  • 1
  • 2
  • 3

Node.js (Express)

关于每次点击链接都要刷新页面的问题

众所周知,开发单页应用就是因为那丝般顺滑的体验效果,如果每次点击都会刷新页面…
出现这个的原因是因为使用了window.location来跳转,只需要使用使用router提供的方法,就能够解决这个问题:

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

Vue.prototype.router = router;
  • 1

之后都使用如下的方式来控制跳转

this.router.push('driver/service');
  • 1

好啦,这次关于Vue路由的“坑”就介绍到这里了,以后会发表更多的优质文章,如果对你有所帮助,请点击赞,谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113680.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spssχ2检验_案例实践:SPSS分层卡方检验[通俗易懂]

    spssχ2检验_案例实践:SPSS分层卡方检验[通俗易懂]两个分类变量卡方检验用着爽,但有一点需要强调一下,要不要控制混杂因素的影响,也许在混杂的影响下,卡方检验的结果并不是原先的那个样子,而我们陷入自我欺骗陷阱还不自知。分层卡方检验,则是在普通卡方检验(一般是2×2)基础上增加一个控制混杂的分层变量,让我们的研究更加现实,考虑到多方面的因素,实际上已经算是一种多因素的分析手段了。案例介绍文彤老师SPSS基础教程上有一个不错的案例。某研究调查了口服避孕药…

    2022年5月16日
    55
  • php数组转换对象方法[通俗易懂]

    php数组转换对象方法[通俗易懂]php虽然不能像js那样直接newObject,但php支持匿名类我们直接新建匿名类进行转换就好了 /***数组转对象*@paramArray$array*@authorQuan*@returnObject*/protectedfunctionarrayTransitionObject(Arr…

    2022年9月11日
    0
  • docker 拉取镜像_docker启动镜像命令

    docker 拉取镜像_docker启动镜像命令docker镜像网站官网https://hub.docker.com/网易蜂巢https://id.163yun.com/需要的登录daocloudhttp://hub.daocloud.io/不需要登录公司内部私服:需要添加配置需要在/etc/docker/daemon.json(如果不存在,则手动创建)添加下面一段话 { “registry-mirrors”:[“https://registry.docker-cn.com”], “insecure-

    2022年9月22日
    1
  • html 5简易的影片播放器

    html 5简易的影片播放器

    2021年8月9日
    64
  • kafka零拷贝原理_通俗易解中的解是什么意思

    kafka零拷贝原理_通俗易解中的解是什么意思Kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不是kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝。下面我就画图讲解零拷贝,如果对你有帮助请点个赞支持。传统IOkafka的数据是要落入磁盘的,那么必然牵扯到磁盘的IO,传统磁盘IO又叫缓存IO,效率是很低的,那么为什么效率低呢?我们先来粗略讲讲操作系统的知识。用户空间以及内核空间的概念:我们知道现在操作系统都是采用虚拟存储器。那么对32位操作系统而言,它的寻址空间(虚拟存储空间)

    2022年9月21日
    0
  • 收集了50道基础的java面试题

    下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最

    2021年12月23日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号