1. 安卓手机自带返回,正常的返回情况
正常的情况应该就是按照浏览器记录的history,每浏览一个页面就会向历史记录栈里面push地址,返回的时候也是上一次浏览的记录,所以这时候产品不高兴了,为啥我题目做完了,也评论完了,还让我返回到做题的页面,这个我不接受。网上有好多说是监听popstate,当时在mounted写的是window.addEventListener("popstate",fn,false);,在destroyed里window.removeEventListener('popstate',fn,false);,这样写的话会破坏vue-router的路由机制。第一次点击是没有什么问题的,但是多次点击返回就会报错,路由重复,然后直至报堆栈溢出。
2.原生的解决办法
mounted() {
window.goBackTo = this.goBackTo;
this.setBack();
},
methods:{
setBack() {
// let handlerFn = this.goBackTo;
window.android.setBackPressCallBack("goBackTo")
},
goBackTo() {
this.$router.replace(`/courseBrief/${this.$route.params.caurseId}/${this.$route.params.eTypeId}/${this.$route.params.flag}?accessToken=${getQueryString('accessToken')}`).catch(err => {
err
})
}
},
}
由于原生是要去window下面去找方法调用,所以要把自己的方法注册到window下面。要不然方法不会执行。
3. 使用vue-router的周期函数
看过文档的你应该知道,vue-router里面有一个组件周期函数“beforeRouteLeave”,这个函数帮了我很大的忙,它既不会破坏vue的路由机制,也可以实现客户爸爸的要求。但是有一点需要注意,next()不能乱用,它会导致路由死循环,直至手机崩溃。这个时候你要想一下你的需求,加上必要的判断,是判断to的,不满足的就直接next掉就好了。
4. ios手势操作
本以为到这里就没什么问题了,但是没想到的是ios手势操作,ios有一个手势操作是在屏幕左边向右滑动会返回上一次访问的页面,但是在app中的webview中,它会把这个webview关闭掉,直接返回到app的首页。客户爸爸说这个能不能搞一下,这个手势真的需要原生禁止掉才行
(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// 禁用返回手势
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
禁止掉以后我肯定要加上向右滑动的操作,这个操作的代码就不发了,你可以使用网上的插件,也可以自己写自己的代码。
总结:
到这里我的2019年度的工作应该差不多全结束了,这一年使用原生js写过项目,自己创建了一套基于gulp打包工具,现在没什么人使用gulp,但是我还是写了一个可以自定义打包的,你可以随便输入你想合并打包的js文件,gulp会自动查找目录下的文件。使用vue 写过项目,看过vue的源码,我只能看出vue的订阅和发布,看不出网上大神们的那么东西,也只能看到它的脏检查是基于什么,diff算法大同小异,如果你在github上看过Virtual DOM这个很早的项目你就知道了vue中的虚拟dom和所谓的网上大神们的虚拟DOM。源码我记不住,我只能尽可能是在不同的场景下去使用这个东西,它的优缺点也只能去体会,说不出来。改过element的穿梭框源码,让它的搜索不在基于已经展示的数据,而是实时查数据。写过小程序,动态的路径展示和路径绘制,写过公众号,公众号的如何拉取appID,如何去验证,使用了oss。自己没事的时候写过react的项目,虽然是自己搭建的项目,掌握谈不上,至少可以直接上手。java今年没怎么看,计划着2019年把讲解spring源码的视频看完,但是时间不允许了。2020年计划以然还是继续深入vue,同时学习TS,把spring源码看完。我知道自己走的慢,但是自己一直在努力。好的运气一定会来到我这边。