Vue路由切换页面不更新问题解决方案


Posted in Javascript onJuly 10, 2020

前言:vue-router的切换不同于传统的页面的切换。路由之间的切换,其实就是组件之间的切换,不是真正的页面切换。这也会导致一个问题,就是引用相同组件的时候,会导致该组件无法更新,也就是我们口中的页面无法更新的问题了。

一、问题呈现

Vue路由切换页面不更新问题解决方案

Vue路由切换页面不更新问题解决方案

Vue路由切换页面不更新问题解决方案

在路由中进行切换结果

Vue路由切换页面不更新问题解决方案

Vue路由切换页面不更新问题解决方案

这时候会发现input标签的value值并没有随着路由的改变而改变。并没有更新

二、解决方案①

给<router-view :key="key"></router-view>增加一个不同:key值,这样vue就会识别这是不同的<router-view>了。

Vue路由切换页面不更新问题解决方案

在路由中进行切换结果

Vue路由切换页面不更新问题解决方案

Vue路由切换页面不更新问题解决方案

这时候路由就会更新了。不过这也就意味着需要把每个<router-view>都绑定一个key值。如果我从page1跳到page2不同组件的话,我其实是不用担心组件更新问题的。

三、解决方案②

给<router-view v-if="routerAlive"></router-view>增加一个不同v-if值,来先摧毁<router-link>,然后再重新创建<router-link>起到刷新页面的效果。

Vue路由切换页面不更新问题解决方案

①因为router-link组件有取消点击事件,这里的.native就是为了触发组件原生标签中的事件。

②this.$nextTick(()=>{}) 的用法是等this.routerAlive = false; 触发后再执行 this.routerAlive = true; 从而起到摧毁再创建的效果。

四、解决方案②的延伸,在路由内部触发路由的刷新。

方案①,方案②都是通过路由的外部来更新路由的,那如果想从路由内部来更新路由呢?

<!-- App.vue根组件代码 -->
<template>
 <div class="app">
   <div class="slide">
     <ul>
       <li><router-link to="/page1/freddy" >freddy</router-link></li>
       <li><router-link to="/page1/nick" >nick</router-link></li>
       <li><router-link to="/page1/mike" >mike</router-link></li>
     </ul>
   </div>
   <div class="content">
       <router-view v-if="routerAlive"></router-view>
   </div>
 </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>
<!-- 组件Page1代码 -->
<template>
  <div class="page-1">
    名字:<input type="text" v-model="value"><br/>
    <button @click="linkToNick1">跳转到nick,不刷新路由</button>
    <button @click="linkToNick2">跳转到nick,并刷新路由</button>
    <br/>
    <button @click="linkToSelf1">跳转到本身,不刷新路由</button>
    <button @click="linkToSelf2">刷新本身</button>
  </div>
</template>
<script type="text/javascript">
  export default {
  name:'page1',
  inject:['routerRefresh'],  //在子组件中注入在父组件中出创建的属性
  mounted(){
    this.value = this.$route.params.name;
  },
  data(){
    return {
      value:''
    }
  },
  methods:{
    linkToNick1(){
    this.$router.push('/page1/nick');
    },
    linkToSelf1(){
    this.$router.push('/page1/freddy');
    },
    linkToNick2(){
    this.$router.push('/page1/nick');
    this.routerRefresh();
    },
    linkToSelf2(){
    this.routerRefresh();
    }
  }
  }
</script>

<style type="text/css">
  button { margin-top:10px;}
    button:hover { background:#ff9500; }
</style>

Vue路由切换页面不更新问题解决方案

①、当我们点击"跳转到nick,不刷新路由" 时,会发现input的value值并没有改变。

Vue路由切换页面不更新问题解决方案

②、当我们点击"跳转到nick,并刷新路由" 时,这时候input的value值就已经改变了。

Vue路由切换页面不更新问题解决方案

③、当我们在input中输入随便输入些数值,然后点击"跳转到本身,不刷新路由",会发现input里面的内容没有刷新。

Vue路由切换页面不更新问题解决方案

④、点击刷新本身就能触发刷新路由了,是不是很实用。

Vue路由切换页面不更新问题解决方案

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery中的常用事件总结
Dec 27 Javascript
关于Mozilla浏览器不支持innerText的解决办法
Jan 01 Javascript
javascript 上下banner替换具体实现
Nov 14 Javascript
JavaSacript中charCodeAt()方法的使用详解
Jun 05 Javascript
JS拖拽插件实现步骤
Aug 03 Javascript
js实现类似菜单风格的TAB选项卡效果代码
Aug 28 Javascript
js实现的后台左侧管理菜单代码
Sep 11 Javascript
jquery实现ajax加载超时提示的方法
Jul 23 Javascript
详解vue+css3做交互特效的方法
Nov 20 Javascript
webpack4 CSS Tree Shaking的使用
Sep 03 Javascript
微信小程序 网络通信实现详解
Jul 23 Javascript
vue编写简单的购物车功能
Jan 08 Vue.js
简单了解Vue computed属性及watch区别
Jul 10 #Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
Jul 10 #Javascript
基于vue+element实现全局loading过程详解
Jul 10 #Javascript
JS sort方法基于数组对象属性值排序
Jul 10 #Javascript
JavaScript this指向相关原理及实例解析
Jul 10 #Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 #Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 #Javascript
You might like
php 常用字符串函数总结
2008/03/15 PHP
PHP SQLite类
2009/05/07 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP实现的json类实例
2015/07/28 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python中super关键字用法实例分析
2015/05/28 Python
Python实现LRU算法的2种方法
2015/06/24 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python爬虫实例详解
2018/06/19 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
网络方面基础面试题
2012/11/16 面试题
幼儿园校车司机的岗位职责
2014/01/30 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
财产保全担保书
2015/01/20 职场文书
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript