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 相关文章推荐
关于COOKIE个数与大小的问题
Jan 17 Javascript
javascript 内存回收机制理解
Jan 17 Javascript
js报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
Sep 28 Javascript
jQuery移动和复制dom节点实用DOM操作案例
Dec 17 Javascript
javascript实现一个数值加法函数
Jun 26 Javascript
javascript实现日期三级联动下拉框选择菜单
Dec 03 Javascript
JS实现的简单标签点击切换功能示例
Sep 21 Javascript
jquery中有哪些api jQuery主要API
Nov 20 jQuery
微信小程序模版渲染详解
Jan 26 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 Javascript
JavaScript仿京东轮播图效果
Feb 25 Javascript
简单了解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
第三节 定义一个类 [3]
2006/10/09 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
JS表的模拟方法
2015/02/05 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
用JS写的一个Ajax库(实例代码)
2016/08/06 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
Python装饰器原理与用法分析
2018/04/30 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
python openssl模块安装及用法
2020/12/06 Python
用python计算文件的MD5值
2020/12/23 Python
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
迟到检讨书800字
2014/01/13 职场文书
服务质量承诺书
2014/03/27 职场文书
法学求职信
2014/06/22 职场文书
2014年招生工作总结
2014/11/26 职场文书
会议通知
2015/04/15 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
社区安全温馨提示语
2015/07/14 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
Java完整实现记事本代码
2022/06/16 Java/Android
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python