提问:vue项目部署到nginx的非根目录location时如何解决刷新 404

来源:11-5 单页应用 Nginx 配置注意事项

wambaoxiaoyiyi

2020-01-17

因为想配置非根目录location,按老师的步骤好像不行。下面是我自己的步骤。

错误步骤:
1、在vue.config.js中的module.exports里添加一行
publicPath: process.env.NODE_ENV === ‘production’ ? ‘/haha/’ : ‘/’

2、将router的base配置成’/haha/'
const router = new VueRouter({
mode: ‘history’,
base: ‘/haha/’,
routes
})

3、nginx配置文件中的server块中添加location。其中/usr/local/myVueApplication/dist/是vue打包放上服务器的目录。
location /haha/ {
alias /usr/local/myVueApplication/dist/;
try_files $uri $uri/ /haha/index.html;
index index.html;
}

结果:上述配置页面刷新不会404,但是刷新后还原滚动条位置的功能失效。
求:怎么配置能让页面刷新不会404而且还原滚动条功能不会失效。

写回答

1回答

Sunday

2020-01-17

你好:

咱们i项目页面的滑动定位需要配合 keepAlive 进行使用。本质上就是监听 keepAlive 组件的 activated 回调事件,在回调事件中,通过之前保存的滑动距离,重新为 滑动的元素设置 scrollTop 的值。

当你的页面主动刷新了之后,所有在页面保存下来的值都会被重置,所以就不会还原滚动位置了。


不过咱们的项目主要还是在 移动端的 APP 中使用,在 APP中是不会存在主动刷新页面的浏览器操作的。如果你要在浏览器中保存滚动距离,那么可以尝试使用浏览器的存储方式来存储滚动数据,比如 sessionStorage 。

0
1
wambaoxiaoyiyi
非常感谢!刚到处逛了下觉得nginx没配置错,然后猜测是页面刷新后虚拟任务栈没了,没想到老师回答这么快。
2020-01-17
共1条回复

混合开发入门 Vue结合Android/iOS开发仿京东项目App

流行的混合开发实战入门,前端和原生开发同学不容错过

1108 学习 · 448 问题

查看课程