h5路由使用keepalive

最近踩坑踩到keepalive了

keepalive作用:缓存组件内部状态,避免重新渲染
换句话来说,当这个A页面跳转至B页面再通过this.$router.replace进入A页面时,不会进入mounted生命周期

可我需要从B页面url携带参数返回A页面,怎么办呢?

路由守卫的钩子函数!!!

beforeRouteEnter(to, from, next) {
  console.log(this, 'beforeRouteEnter'); // undefined
  console.log(to, '组件独享守卫beforeRouteEnter第一个参数');
  console.log(from, '组件独享守卫beforeRouteEnter第二个参数');
  console.log(next, '组件独享守卫beforeRouteEnter第三个参数');
  next(vm => {
    //因为当钩子执行前,组件实例还没被创建
    // vm 就是当前组件的实例相当于上面的 this,所以在 next 方法里你就可以把 vm 当 this 来用了。
    console.log(vm);//当前组件的实例
  });
}

页面实战中应用如下

beforeRouteEnter(to, from, next) {
  // 当前路由keepalive
  next((vm) => {
    vm.data = to.query ? to.query : vm.data;
    console.log('vm.data', vm.data);
    vm.communityUuid = String(vm.data.communityUuid);
    if (vm.data.phone) {
      vm.phoneValue = String(vm.data.phone);
    }
    if (vm.data.communityName) {
      vm.communityName = decodeURIComponent(vm.data.communityName);
    }
    // 从房屋二维码过来的,housesAddress直接赋值,并且记录方式
    vm.typeCheck = vm.data.housesAddress ? 'fwewm' : '';
    if (vm.typeCheck === 'fwewm') {
      vm.housesAddress = decodeURIComponent(vm.data.housesAddress);
      vm.housesUuid = vm.data.houseUuid;
    }
  });
}

最后真机调试显示的是这样


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容