【Vue】监控路由与路由参数, 刷新当前页面数据的几种方法

这篇具有很好参考价值的文章主要介绍了【Vue】监控路由与路由参数, 刷新当前页面数据的几种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Vue监控路由

1、Vue中watch监控路由

2、Vue中watch监控路由的某一个参数

3、Vue中watch同时监控多个路由

二、刷新当前页面数据

1、location.reload

2、$router.go(0)

3、this.$router.resolve()与this.$router.resolve()

a、this.$router.resolve()

b、this.$router.push()

三、示例场景

四、往期相关优质推荐


vue监听路由变化刷新页面,vue.js,javascript,前端

Vue官网 Element官网

vue监听路由变化刷新页面,vue.js,javascript,前端

vue监听路由变化刷新页面,vue.js,javascript,前端

一、Vue监控路由

1、Vue中watch监控路由

        如果你想要监控整个路由对象的变化,包括路由路径、参数、查询参数等的变化,可以使用`$route`对象进行监控。以下是一个使用`watch`监控整个路由对象的示例:

<template>
  <div>
    <!-- 显示监控的路由信息 -->
    <div>{{ monitoredRoute }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      monitoredRoute: null, // 用于存储监控的路由信息
    };
  },
  watch: {
    '$route'(newRoute) {
      this.monitoredRoute = newRoute; // 将新的路由信息保存到组件的monitoredRoute属性中
      // 执行其他操作或调用其他方法
    },
    //或
    $route(newRoute) {
      this.monitoredRoute = newRoute; // 将新的路由信息保存到组件的monitoredRoute属性中
      // 执行其他操作或调用其他方法
    },
  },
};
</script>

在这个示例中,我们在组件的`data`选项中定义了一个`monitoredRoute`属性,用于存储监控的路由信息。在`watch`选项中,使用`'$route'`来指定要监控的路由对象。当路由发生变化时,`watch`函数会被触发,将新的路由信息保存到组件的`monitoredRoute`属性中。

你可以根据需要在`watch`函数中执行其他操作或调用其他方法,例如根据路由信息更新组件的状态、重新加载数据等。

请注意,上述示例中的`monitoredRoute`是一个示例属性名,你可以根据需要将其替换为你自己定义的属性名。

2、Vue中watch监控路由的某一个参数

在Vue中,可以使用`watch`选项来监控路由的某一个参数的变化。以下是一个使用`watch`监控路由参数的示例:

<template>
  <div>
    <!-- 显示监控的参数值 -->
    <div>{{ monitoredParam }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      monitoredParam: null, // 用于存储监控的参数值
    };
  },
  watch: {
    '$route.params.monitoredParam'(newValue) {
      this.monitoredParam = newValue; // 将新的参数值保存到组件的monitoredParam属性中
      // 执行其他操作或调用其他方法
    },
  },
};
</script>

在这个示例中,我们在组件的`data`选项中定义了一个`monitoredParam`属性,用于存储监控的参数值。在`watch`选项中,使用`'$route.params.monitoredParam'`来指定要监控的路由参数。当监控的参数发生变化时,`watch`函数会被触发,将新的参数值保存到组件的`monitoredParam`属性中。

你可以根据需要在`watch`函数中执行其他操作或调用其他方法,例如根据参数值更新组件的状态、重新加载数据等。

请注意,上述示例中的`monitoredParam`是一个示例参数名,你需要将其替换为你要监控的实际参数名。另外,如果你还需要监控其他路由参数,可以在`watch`选项中添加相应的监控函数。

3、Vue中watch同时监控多个路由

<template>
  <div>
    <!-- 显示监控的路由信息 -->
    <div>{{ monitoredRoute }}</div>
    <!-- 显示监控的参数值 -->
    <div>{{ monitoredParam }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      monitoredRoute: null, // 用于存储监控的路由信息
      monitoredParam: null, // 用于存储监控的参数值
    };
  },
  watch: {
    '$route'(newRoute) {
      this.monitoredRoute = newRoute; // 将新的路由信息保存到组件的monitoredRoute属性中
      // 执行其他操作或调用其他方法
    },
    '$route.params.monitoredParam'(newValue) {
      this.monitoredParam = newValue; // 将新的参数值保存到组件的monitoredParam属性中
      // 执行其他操作或调用其他方法
    },
  },
};
</script>

二、刷新当前页面数据

1、location.reload

在Vue.js中,可以使用`location.reload()`方法重新加载当前页面。这个方法会导致浏览器重新发送请求并重新加载页面。

要在Vue组件中使用`location.reload()`,可以在需要重新加载页面的地方调用该方法。例如,在一个按钮的点击事件处理程序中:

methods: {
  reloadPage() {
    location.reload();
  }
}

然后,在模板中使用这个方法:

<button @click="reloadPage">重新加载页面</button>

当用户点击按钮时,页面将会重新加载。

需要注意的是,`location.reload()`方法会导致页面完全重新加载,包括重新执行Vue实例的生命周期钩子函数。这可能会导致数据丢失,因为重新加载后,Vue实例将会被重置。

如果你只是想重新加载某个组件或重新获取数据,而不是整个页面,你可以考虑使用Vue的其他方法,如重新发起异步请求或重新设置组件的数据。

2、$router.go(0)

        在Vue.js中,可以使用`$router.go()`方法进行路由导航。该方法用于在路由之间进行前进或后退操作。`$router.go()`方法接受一个整数作为参数,表示前进或后退的步数。正数表示前进,负数表示后退。

下面是`$router.go()`方法的使用方法示例:

序号 代码 释义
1 this.$router.go(-1);   // 后退+刷新;
2 this.$router.go(0);    // 刷新;
3 this.$router.go(1);    // 前进一步
4 this.$router.go(2);    // 前进两步
5 this.$router.go(n);    // 前进n个页面

你可以在Vue组件的方法中使用`$router.go()`方法来触发路由导航。例如,在一个按钮的点击事件处理程序中:

methods: {
  goForward() {
    this.$router.go(1);
  },
  goBack() {
    this.$router.go(-1);
  }
}

然后,在模板中使用这些方法:

<button @click="goForward">前进</button>
<button @click="goBack">后退</button>

当用户点击"前进"按钮时,将向前导航一步。当用户点击"后退"按钮时,将后退一步。

需要注意的是,`$router.go()`方法只能在使用Vue Router进行路由管理的应用程序中使用。如果你的应用程序没有配置Vue Router,或者当前路由没有前进或后退的历史记录,`$router.go()`方法可能不会产生任何效果。

3、this.$router.resolve()与this.$router.resolve()

        `this.$router.resolve()`和`this.$router.push()`是Vue Router中的两个不同的方法,用于处理路由相关的操作,但它们有不同的作用和使用方式。

a、this.$router.resolve()

  • 作用:用于解析路由的相关信息,而不进行实际的导航操作。
  • 使用方式:接受一个路由路径作为参数,并返回一个Promise对象,该Promise对象包含解析后的路由信息。
  •  示例:
const resolvedRoute = this.$router.resolve('/example-route');
resolvedRoute.then(route => {
   // 处理解析后的路由信息
});

b、this.$router.push()

  • 作用:用于进行路由导航,将用户导航到指定的路由。
  • 使用方式:接受一个路由路径或一个描述路由的对象作为参数,进行实际的导航操作。
  • 示例:
// 导航到指定路由路径
this.$router.push('/example-route');
// 导航到带参数的路由
this.$router.push({ path: '/example-route', query: { id: 1 } });

使用`this.$router.resolve()`方法时,你可以获取解析后的路由信息,但它并不会触发实际的路由导航。而使用`this.$router.push()`方法时,会将用户导航到指定的路由路径或描述的路由对象。

因此,如果你只需要获取解析后的路由信息而不进行实际的导航操作,可以使用`this.$router.resolve()`方法。如果需要进行实际的路由导航,应该使用`this.$router.push()`方法。

三、示例场景

       比如一个页面需要有可能跳转到相同页面,  也可能跳转到不同页面, 为了体验更好,  可以综合情况判断使用那种刷新方式。

//页面类型变化直接
'$route.query.type'(newValue) {
	this.$router.push("/xx/yy_detail?type=0&id=" + row.id);
}

//相同页面相同数据但需要重新渲染(条件结合具体情况)
'$route.query.xx'(newValue) {
  this.$router.go(0);
}

//相同页面不同数据
'$route'(newValue) {
  this.init();
},

methods: {
    init(){
      this.detail();
      this.$refs["ppData"].flush(this.$route.query.id);
      this.$refs["fileData"].flush(this.$route.query.id);
      this.$refs["child3"].flush(this.$route.query.id);
      this.$refs["child4"].flush(this.$route.query.id);
      this.$refs["child5"].flush(this.$route.query.id);
      this.$refs["child6"].flush(this.$route.query.id);
    },
},

四、往期相关优质推荐

VSCode 最全实用插件(VIP典藏版)
Vue超详细整理(VIP典藏版)
Vue中created,mounted,updated详解
一文快速上手Echarts(持续更新)
Vue中el-table数据项扩展各种类型总结(持续更新)

vue监听路由变化刷新页面,vue.js,javascript,前端

有用请点赞,养成良好习惯!

疑问、交流、鼓励请留言!文章来源地址https://www.toymoban.com/news/detail-712937.html

到了这里,关于【Vue】监控路由与路由参数, 刷新当前页面数据的几种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Vue】实现当前页面刷新的四种方法

    这两周在写一个后台管理,每次调用接口实现增删改查的过程中,都需要刷新当前页面或者刷新数据。如果手动点击浏览器的小圈圈不仅麻烦、用户体验感极差,而且不会真的有人让用户手动刷新叭。。。这个问题可以称得上是前端的bug了。那么,顺着这个问题,一通搜寻下

    2023年04月26日
    浏览(54)
  • uniapp,转微信小程序,获取当前页面的 路由、路由参数

    uniapp 获取当前路由信息跟 vue 不同,它没有 route 对象。 uniapp 转成小程序后是这样的 当前页面展示的路由信息就是上一条中获取到的 pages 的最后一条路由,即 它的内容是: 当前路由的参数 在 currentRoute.options 中 比如 index?type=diarydiaryid=123 的 options 就是 而 当前页面的完整路

    2024年02月14日
    浏览(89)
  • vue获取当前路由的几种方式

    第一种 第二种 通过getCurrentInstance 获取当前的组件实例,从而通过其获取router,然后胡德当前路由地址 第三种 第四种 第五种

    2024年02月13日
    浏览(66)
  • vue路由跳转后,刷新指定页面。

            做项目遇到一个坑:A页面带参跳转到B页面,第二次跳转时的参数与第一次时的参数不同,但是后台查询时还是使用的第一次的参数。需要手动刷新之后,才会使用第二次参数。         鉴于时间原因直接使用刷新页面监听路由的方法。在准备跳转的A页面添加路

    2024年02月12日
    浏览(72)
  • vue 动态路由刷新失效及404页面处理

    在开发后台管理项目,我们会使用vue动态路由做权限管理,但是使用vue动态路由时会遇到一些坑,这里总结一下,并提供解决思路 问题:刷新页面时会把addRouter添加的动态路由刷新掉,因此浏览器找不到之前添加的路由,便会进入白屏页面或者404页面 处理方式:判断是否刷

    2024年02月12日
    浏览(54)
  • VUE路由跳转并刷新页面(框架层实现)

    前言         网上找了很多办法,都需要开发者在页面内单独实现,或者是刷新整个浏览器,感觉并不是特别舒服。因此,我考虑可以在框架层去实现路由跳转刷新。         思路如下:                 1、重定向至临时界面(用户无感知)                 2、打开临时

    2024年02月11日
    浏览(58)
  • Vue路由模式(history模式 刷新页面空白解决方案)

    vue路由的三种模式 Hash模式 、 History模式 、 abstract 模式 Vue3: Hash 模式是用 createWebHashHistory() 创建的: Vue2 它在内部传递的实际 URL 之前使用了一个哈希字符(#)。由于这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理。不过,它在 SEO 中确实有

    2024年02月12日
    浏览(63)
  • vue3 动态添加路由刷新后页面丢失(白屏)问题

    动态添加路由操作一般是用vuex或者Pinia封装,在登录页面调用 如果出现刷新页面丢失有两种可能: 1:vuex或者Pinia没有做持久化处理 2:动态添加路由需要在main.ts里面也调用一次 不需要路由守卫即可实现 注意:必须要在页面挂载前还有路由配置完成前调用添加,不然还是丢

    2024年02月16日
    浏览(56)
  • 关于vue路由跳转后的页面不会刷新的解决办法

    做uni项目的时候遇到的情况:1,父组件页面刷新了之后 需要触底加载的子组件能触底加载,否则不能加载。2,子组件不能触底加载,只需要刷新之后就能触底加载。以上的刷新不包括下拉刷新。3. 可能因为包了一层tab页导致跳转进页面没有请求数据的问题。 我的解决办法是

    2024年02月11日
    浏览(63)
  • vue通过router地址传参跳转同一路由页面,页面不刷新的解决办法

    vue、 vue-router@4 记录一下最近遇到的vue路由页面间的跳转的问题,其中就涉及到了不同路由的跳转(/a/b1 = /a/b2)、相同路由不同参数间的跳转(/a/b?c=1 = /a/b?c=2)、相同页面锚点跳转(/a/b#id1 =/a/b#id2) 原因:渲染的是同一组件 解决:可以在不刷新的页面通过监听route,重新加载

    2024年02月04日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包