需求:微信公众号,可以从外部微信菜单点击分别进入每个单个页面,并且进入后页面还有自己的独立一套菜单。内部菜单和外部菜单完全一致。
技术:单页vue,
坑:1.“/”重定向页面的处理。
2. 路由地址的获取
3.大坑,单页应用跳转外部链接,返回时,处理不当,会多增加一次历史记录history,这个是最头疼的
解决办法:
1.如果说你的项目没有首页这种概念,“/”重定向的页面只就需要特别注意了,我们需要用this.$router.replace来代替this.$router.push,replace这个东西是一个大杀器,关键时刻真的管用,公众号点击进来的时候,如果你的“/”有设置,在返回的时候,从你的指定页面先到“/”的页面,再按一次返回才能退出到公众号页面。所以,在这种需求下,我们的“/”通常设置一个空白页来进行承载replace倒退的那一步history。
2.由于从公众号点击进来的时候我们要获取路由url,并且在页面内部还可以独立点击菜单更改url,这就有难度了,我们可以把页面菜单id通过本地存储存起来,从公众号进来的时候如何获取路由呢?可以当做参数加在?后面。
3.单页应用最头疼的就是一些浏览器的history,为了破解这些硬bug,我们要一步一步搞清楚bug的起因经过结果,单页应用跳转外部链接后,我们需要返回,在返回的时候,虽然走的是浏览器的history,但是我们的单页也会从app.vue加载一次,这样就造成了两步history,解决办法是在路由分配时不要用push,用replace,来使得多余的history被清除,这样的话,在移动端的退出逻辑就没有什么bug了。这里要说明的是,“/”这个页面是很重要的,重定向页面决定了你的前进后退,因为浏览器不支持单页应用的前进后退,所以每次从app.vue进来的时候,都会额外增加一次history。