关于vue路由监听事件跳转的问题

目录
  • vue路由监听事件跳转
    • 1.监听路由触发事件的语法
    • 2.可能遇到的问题
  • vue路由监听不到怎么办
    • 方法一
    • 方法二
    • 方法三

vue路由监听事件跳转

1.监听路由触发事件的语法

 watch: {
    $route: function clearSelectionRow() {
      console.log("success");
      this.$emit("setSelectionFile", []);
    },
  }

代码实现功能:当本页面路由发生变化的时候,执行回调函数clearSelectionRow();

2.可能遇到的问题

①$route后接函数,函数可以是现定义的,也可以是在methods方法中已经定义完成的;

②监听watch封装在最底层的组件的时候,注意跳转后该组件是否摧毁重建;如果被摧毁重建,路由监听触发事件将不执行,摧毁重建:一个组件调用两次分别显示,在页面上无区别,但是是同意组件的再次渲染,定义在该组件上的路由变化将监听不到。

解决方法:将路由监听放在一直不变的主页面index.vue上.

③当需要在同一属性下执行多个回调函数的时候,将函数以对象的形式放在数组中

$route: [
      function clearSelectionRow() { //回调函数1
        this.$emit("setSelectionFile", []);
      },
      {//回调函数2
        handler(route) {
          
      },
    ],

vue路由监听不到怎么办

最近在使用vue项目的时候发现我们使用的watch监听不到$route的变化,查了很多文档最终终于找到解决办法。

方法一

路由包含子路由

{
  name: 'home',
  component: Home,
  path: '/home',
  children: [
    {
      path: 'main',
      name: 'main',
      component: Main,
    },
    {
      path: 'login',
      name: 'login',
      component: Login,
    },
  ]
}

在几个子路由之间跳转就能保证监听到路由变化

方法二

监听$route.path对象

watch: {
    "$route.path":{
      handler(to, from) {
        console.log('to:::', to);
        console.log('from:::', from);
      },
      deep: true
    }
  }

如果我们的路由没有子路由,想要实现监听可以使用$route.path进行深度监听,这样也能监听到路由变化了。

方法三

使用vue自带的路由守卫beforeRouteEnter ,beforeRouteUpdate ,beforeRouteLeave

beforeRouteEnter (to, from, next) {
    next(vm => {
        // 通过 `vm` 访问组件实例
      })
  },
  beforeRouteUpdate (to, from, next) {
  },
  beforeRouteLeave (to, from, next) {
  }

据说还能通过设置keep-alive来保证路由被监听到,这个我最近还没用的,有用过的小伙伴可以分享一下。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Vue路由监听实现同页面动态加载的示例

    场景分析 在系统中一个模块有三个子模块. 业务数据中可以直接根据类型去区分这个三个子模块的归属. 通常情况下.我们是写在同一个模块中然后去选择业务类型. 但是业主要求,将这个拆分成三个菜单.用户根据自己的需求去选择需要使用的模块. 这个三个菜单使用的是同一张数据表. 所以我们肯定只写一个 list,add,edit页面的. 然后根据进入页面的路由来判断属于哪一个分类.并跳转指定分类的 新增,编辑, 和调用对应的列表接口页面 开发 由于三个模块使用的相同的页面.所以需要配置三份路由.并且做出页面区

  • vue监听浏览器原生返回按钮,进行路由转跳操作

    今天测试给我报了个bug说点击浏览器返回页数据显示的不对,我查了半天原因:需要监听浏览器的回退按钮,并阻止其默认事件. 具体操作方法如下: 1.挂载完成后,判断浏览器是否支持popstate mounted(){ if (window.history && window.history.pushState) { history.pushState(null, null, document.URL); window.addEventListener('popstate', this.canc

  • vue在App.vue文件中监听路由变化刷新页面操作

    在路由跳转时,会出现页面需要重新刷新一遍才能获取数据加载页面,这时添加一个监听器,如果跳转到页面刷新一次. export default { name: 'App', provide(){ return{ reload:this.reload } }, data(){ return { isRouterAlive:true, } }, //监听器 watch: { // 方法1 '$route' (to, from) { //监听路由是否变化 // console.log(999) if(to.

  • vue监听路由变化时watch方法会执行多次的原因及解决

    目录 需求描述: 需求解析: 解决需求 问题解决 本人前端菜鸟一名,一直致力于不间断的生产管理后台的bug,并以此自勉自励.近几天接到一个需求,网上也搜了很多例子,但是没有从根本上解决.在这里记录一下我自己的解决的过程,这也是第一次在掘金发言,求轻虐. 需求描述: 有A.B两个页面,需要将A页面的orderId用路由传参的方式传入到B页面执行数据关联查询,然后显示在B页面 需求解析: 如果是你,你拿到这个需求,应该很容易想到在B页面对路由变化做watch,然后获取参数执行查询数据的方法完事. 解

  • vue监听路由变化的几种方式小结

    目录 监听路由变化的几种方式小结 一.监听路由从哪儿来到哪儿去 二.监听路由变化获取新老路由信息 三.监听路由变化触发方法 四.全局监听路由 如何在组件中监听路由参数的变化? 方式一: 监听 $route 方式二:通过组件内的导航守卫 监听路由变化的几种方式小结 vue页面开发中,我们经常需要根据路由的变化去实现一些操作,那么如何监听路由的变化呢?当然是利用VUE中的watch,请看代码. 一.监听路由从哪儿来到哪儿去 watch:{     $route(to,from){       con

  • Vue使用路由钩子拦截器beforeEach和afterEach监听路由

    在路由跳转的时候,我们需要一些权限判断或者其他操作.这个时候就需要使用路由的钩子函数. 定义:路由钩子主要是给使用者在路由发生变化时进行一些特殊的处理而定义的函数. 总体来讲vue里面提供了三大类钩子,两种函数 1.全局钩子 2.某个路由的钩子 3.组件内钩子 两种函数: 1. router.beforeEach(function(to,form,next){}) /*在跳转之前执行*/ 2. router.afterEach(function(to,form)}{}) /*在跳转之后判断*/

  • 关于vue路由监听事件跳转的问题

    目录 vue路由监听事件跳转 1.监听路由触发事件的语法 2.可能遇到的问题 vue路由监听不到怎么办 方法一 方法二 方法三 vue路由监听事件跳转 1.监听路由触发事件的语法  watch: {     $route: function clearSelectionRow() {       console.log("success");       this.$emit("setSelectionFile", []);     },   } 代码实现功能:当本

  • vue v-on监听事件详解

    在html或jsp页面中我们总能碰到监听DOM事件来触发javaScript代码,下面我们就简单聊聊Vue.js中的监听事件是怎么处理的. 在vue.js中监听事件是通过v-on指令来实现的,先看一下简单的监听事件代码. <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <scrip

  • vue实现路由监听和参数监听

    1.路由携带数据跳转 routerAction(hideDisplays, data) { switch (hideDisplays) { case "pubAccountMenu": this.$router.push({ name: "AppAccountInfo", }); break; //在菜单路由上存储各种需要信息 case "publicDocInfoMenu": //菜单code: publicDocInfoMenu data.i

  • 使用 vue 实例更好的监听事件及vue实例的方法

    文章举例说明一下在 vue 中如何更好的监听浏览器事件.原文介绍了一种新增 vue 实例的方法,单独监听事件.这样代码书写较为简练,容易管理. 当监听如下事件的传统做法是: window.scrollX window.scrollY window.innerHeight window.innerWidth 通常需要书写很多代码: created () { this.$el.addEventListener('click', this.someMethod) }, destroyed () { t

  • Vue监听事件实现计数点击依次增加的方法

    1.实现计数器功能,每点击一次按钮,count值增加一或增加二,鼠标在cordinates行移动时会更新当前坐标,通过自定义函数或者stop属性禁止事件传播. 效果如下: 代码如下: <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>计数器自增函数</title> <script src="vue.js"></s

  • vue中监听路由参数的变化及方法

    在vue项目中,假使我们在同一个路由下,只是改变路由后面的参数值,期望达到数据的更新. mounted: () =>{ this.id = this.$route.query.id; this.getdetail() } getDetail()方法中会用到this.id这个参数,在同一页面切换id的值,并不会触发vue的声明周期函数. 可以添加路由监听: watch: { $route: { handler() { this.id = this.$route.query.id; this.get

  • Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求

    网上很多博客说监听窗口关闭事件使用window.beforeunload,但是这个监听事件也会在页面刷新的时候执行,经过百度和自己的实际测试, 终于解决了这个问题,代码如下: mounted() { window.addEventListener('beforeunload', e => this.beforeunloadHandler(e)) window.addEventListener('unload', e => this.unloadHandler(e)) }, destroyed(

  • Vue路由this.route.push跳转页面不刷新的解决方案

    Vue路由this.route.push跳转页面不刷新 一.背景 介绍:在vue项目开发中,使用路由进行页面跳转时,路由所跳转的页面不进行刷新. 也就是vue生命周期函数没有执行(created.mounted钩子函数). 案例: A页面: B页面: 问题: 当在A页面第一点击按钮到B页面时,一切正常,当返回到A页面再次点击按钮时,B页面没有执行mounted钩子函数,结果导致mounted函数中查询方法不执行. 二.解决方法: 1.使用activated:{}周期函数代替mounted:{}函

  • Vue 页面监听用户预览时间功能的实现代码

    最近的业务中涉及到这样一个需求,在线培训的系统需要知道用户对某个在线预览的页面追踪用户的预览时长.初步我们首先想到借助 Vue 页面的生命周期函数 mounted 和 destroyed,分别在其中加入开始计时和清除计时的逻辑,通过后台的接口上报对应的培训素材的时间数据,即可达到目的. 有了思路,我们就可以开始筹划具体的代码. 定义开始结束计时函数 在 data 中定义我们通过变量定义计时器,这样可以通过 this.timer 随处可访问,便于后面销毁页面的时候清除它. duration 为时长

随机推荐