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 相关文章推荐
利用XMLHTTP传递参数在另一页面执行并刷新本页
Oct 26 Javascript
JQuery实现动态表格点击按钮表格增加一行
Aug 24 Javascript
js实现按钮颜色渐变动画效果
Aug 20 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
Aug 16 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
微信小程序之蓝牙的链接
Sep 26 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
微信小程序表单验证form提交错误提示效果
Jun 19 Javascript
JS实现计算小于非负数n的素数的数量算法示例
Feb 26 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
微信小程序自定义导航栏(模板化)
Nov 15 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
PHP字符串处理的10个简单方法
2010/06/30 PHP
PHP对象实例化单例方法
2017/01/19 PHP
php递归函数怎么用才有效
2018/02/24 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
短信提示使用 特效
2007/01/19 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
script标签属性用type还是language
2015/01/21 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
详解如何利用Cython为Python代码加速
2018/01/27 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
党员自我评价2015
2015/03/03 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
八年级历史教学反思
2016/02/19 职场文书
mysql全面解析json/数组
2022/07/07 MySQL