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 相关文章推荐
禁止F5等快捷键的JS代码
Mar 06 Javascript
基于jquery的复制网页内容到WORD的实现代码
Feb 16 Javascript
js的表单操作 简单计算器
Dec 29 Javascript
web css实现整站样式互相切换
Oct 29 Javascript
jQuery获取动态生成的元素示例
Jun 15 Javascript
jQuery表格行上移下移和置顶的实现方法
Oct 08 Javascript
深入理解JS DOM事件机制
Aug 06 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
JsonServer安装及启动过程图解
Feb 28 Javascript
vue中jsonp插件的使用方法示例
Sep 10 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 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数据库连接
2006/10/09 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
js实现温度计时间样式代码分享
2015/08/21 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
详解Python中for循环的使用方法
2015/05/14 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
python跨文件使用全局变量的实现
2020/11/17 Python
python os.rename实例用法详解
2020/12/06 Python
房地产促销活动方案
2014/03/01 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
分家协议书
2014/04/21 职场文书
大学迎新标语
2014/06/26 职场文书
2016新年感言
2015/08/03 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL