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中加上你项目名称就行了,这样就能够成功了。
最后的页面效果:
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路由的“坑”就介绍到这里了,以后会发表更多的优质文章,如果对你有所帮助,请点击赞,谢谢
- Vue路由History mode模式中页面无法渲染的原因及解决
- Vue路由History mode模式中页面无法渲染的原因及解决
- Vue路由History mode模式中页面无法渲染的原因及解决
- 详解Vue路由History mode模式中页面无法渲染的原因及解决
- CSS 控制Html页面高度导致抖动问题的原因
- 造成IE下页面无法正常显示的几个原因
- jqgrid postData setGridParam 调用多次时查询条件累加的问题--详情页查询导致的无法在新的页面中查询
- 安装 SQL SERVER 2008经验小结发现 它与淘宝旺旺冲突导致淘宝旺旺无法登陆的原因,及个人感想
- 浏览器渲染HTML过程(页面重构师的存在所在原因)
- 在EXT框架中,使用JS文件设置UEditor文本框,出现新增内容很多,页面变型,不出现滚动条,导致无法进行操作。
- TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—基础知识篇
- dedecms网站出现多图发布无法使用页面空白的原因及解决办法
- layer弹窗iframe页面,关闭弹窗方法导致form表单无法提交到服务器
- 关于tomcat服务器部署,页面报404/500错误,myeclipse异常关闭 导致tomcat 6.0 无法重启 的问题
- ios iphone5s (64位处理器原因) 及以后通过 AsyncSocket TCP 通信 出现服务器端接收超时,导致无法通信
- 直接给vue数组赋值,无法渲染到页面
- 都是“#”号惹得祸――URL中“#”号导致无法刷新页面问题
- CSS 控制Html页面高度导致抖动问题的原因
- CSS 控制Html页面高度导致抖动问题的原因
- jquery mobile 页面缓存 导致事件无法触发