在微信上打开浏览器时碰到了 用户跳转一个页面之后按返回按钮,没有触发初始化的js代码的问题,记录一下解决办法。
1.原生写法:
function pushHistory() {
var state = {
title: "title",
url: "#"
};
window.history.pushState(state, "title", "#xx");
}
pushHistory();
window.addEventListener("popstate", function(e) {
console.log(e);
alert("我监听到了浏览器的返回按钮事件啦");//根据自己的需求实现自己的功能
}, false);
2.vue可以使用 keep-alive配合activated
首先,我们需要使用router.meta属性,修改需要缓存的组件路由如下
// keepAlive和isback这两个很重要!
{
path: '/usermanage',
name: 'usermanage',
meta: {
keepAlive: true, //该字段表示该页面需要缓存
isBack: false, //用于判断上一个页面是哪个
title: '人员管理'
},
component: resolve => require(['@/views/userManage/userManage'], resolve) // 路由懒加载
},
然后修改需要缓存的组件中的代码(只放重点部分):
export default {
name: 'currentName',
data() {
return {
isFirstEnter: false, //
}
},
beforeRouteEnter(to, from, next) {
if (from.name == 'nextName') { // 这个name是下一级页面的路由name
to.meta.isBack = true; // 设置为true说明你是返回到这个页面,而不是通过跳转从其他页面进入到这个页面
activated() {
if (!this.$route.meta.isBack || this.isFirstEnter) {
this.initData() // 这里许要初始化dada()中的数据
this.getDataFn() // 这里发起数据请求,(之前是放在created或者mounted中,现在只需要放在这里就好了,不需要再在created或者mounted中请求!!)
}
this.$route.meta.isBack = false //请求完后进行初始化
this.isFirstEnter = false;//请求完后进行初始化
},
}
2270

被折叠的 条评论
为什么被折叠?



