vue同页面跳转,实现页面重新刷新解决方案

问题描述

vue跳转同一路径时,路由参数改变,但页面无法更新

问题原因

vue路由切换实际是组件间的切换,引用相同组件的时候,组件的生命周期钩子不会再被调用,页面就无法更新

解决方案
方案1.watch监听路由参数变化(或者beforeRouteUpdate),并重新渲染

该方式可以实现页面重新加载数据效果,滚动条没有返回顶部问题,需要让document.body.scrollTop=0;

watch: {
    '$route' (to, from) {
      // 对路由变化作出响应...
    }
  }
方案2. provide和inject结合使用

实现思路:在app.vue目录下,对<router-view></router-view>进行摧毁和重建(通过变量routerAlive的状态控制),页面会进行重新渲染。

下面是方案2的具体实现

//app.vue
<template>
  <div id="app">
    <router-view v-if="routerAlive"  />
  </div>
</template>

<script>
export default {
  data(){
    return{
      routerAlive:true
    }
  },
  provide(){
    return {
      routerRefresh: this.routerRefresh
    }
  },
  methods:{
    routerRefresh(){
      this.routerAlive = false;
      this.$nextTick(()=>{
          this.routerAlive = true;
      });
    },
  }

}
</script>
//page.vue
<template>
  <div>
      <div>跳转到当前页,并改变参数,重新渲染</div>
      <button @click="linkToCurPage">跳转</button>
  </div>
</template>

<script>
export default {
  inject:['routerRefresh'],   //在子组件中注入在父组件中创建的属性
  data() {
    return {
      paramsData:this.$route.query.paramsName,//当前页面url所带参数 假设为1
    }
  },

  mounted(){
    //渲染页面数据
    this.getData();
  },
  methods:{
    //页面数据请求
    getData(){
      const that=this;
      //请求参数
      let params={
        params:this.paramsData
      };

      //发送请求...
      
    },

    //跳转页面
    linkToCurPage:function(){
      this.paramsData=2; //更改参数信息
      this.$router.push({
        path:"/page",
        query:{
          paramsName:this.paramsData
        }
      this.routerRefresh();//调用app.vue里面的routerRefresh()方法,完成摧毁和重建过程
    },
  }
};
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 回忆: 我们知道,h5的history或者hash帮助我们解决了,变化url跳转页面不发送请求,并且我们能监听到u...
    LoveBugs_King阅读 3,682评论 0 5
  • 路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about...
    六月太阳花阅读 632评论 0 3
  • 那这次呢?我决定直接就先放一个小小demo上来 其实我们在引入vue-router插件那一刻,我们的网页就已经附带...
    看物看雾阅读 852评论 0 1
  • SPA单页应用 传统的项目大多使用多页面结构,需要切换内容的时候我们往往会进行单个html文件的跳转,这个时候受网...
    视觉派Pie阅读 11,928评论 1 55
  • 要招一个会vue的开发者: 作为面试官的你,你还会每次都只是问这些老土的问题吗?你对MVVM的理解是什么?你知道什...
    浪子神剑阅读 23,181评论 0 260