vue使用watch监听数据变化来发请求,vue什么时候监听watch

  vue使用watch监听数据变化来发请求,vue什么时候监听watch

  本文主要介绍了vue监控路由变化时会多次执行watch方法的原因和解决方法,帮助大家更好的理解和学习使用vue框架。感兴趣的朋友可以了解一下。

  

目录

  要求描述:

  需求分析:

  解决需求

  问题解决

  我是前端的菜鸟,一直致力于后台不间断的生产和管理bug,也一直鼓励自己。最近几天接到一个需求,网上搜了很多例子,但是没有从根本上解决。在这里,我将记录下自己的求解过程。这也是我第一次在掘金发声,求轻虐。

  

需求描述:

  有a和b两个页面,a页面的orderId需要通过路由传输到b页面,然后显示在b页面进行数据关联查询。

  

需求解析:

  如果是你,你得到了这个需求,应该很容易想到在B页观看路由变化,然后获取参数执行查询数据的方式。

  

解决需求

  第一页:

  恒定路线={

  名称: BpageName ,

  params:{ orderId:this . table data[index]。id },

  元:{

  标题:“第二页”

  }

  }

  这个。$router.push(路由)

  推送一条路线重新打开b页。

  然后,接受页面B中的路由参数:

  @ Watch( $ route . params . package id )

  routeparamschanged(new params:any,old params:any):void {//通过监听参数的变化再次复制参数。

  if (newParams) {

  this.getList(newParams)

  }

  }

  看起来简单吗?

  但问题来了,因为B页是keep-alive缓存的,第一次路由切换时只执行了一次routeParamsChanged方法,达到了预期的效果。但是,如果您关闭页面B或从页面A跳转到页面B而没有关闭页面B,routeParamsChanged方法将被触发两次或更多次。

  查了很多资料,这里解释一下vue项目手表中功能的反复触发。

  解决方案1:确定fullPath是否是页面。

  如果(这个。$route.fullPath===一个页面路由路径){

  //做点什么

  }

  我兴奋地试了一下。

  @Watch($route )

  routeparamschanged(new params:any,old params:any):void {//通过监听参数的变化再次复制参数。

  if (newParams===/Apage) {

  this.getList(newParams)

  }

  }

  结果还是不行,routeParamsChanged方法还是会执行两次以上。解决方案2:添加一个flag参数来判断页面是否活动。使用keep-alive缓存的组件只会触发激活和停用的事件,所以只要在这两个事件被触发时将标志设置为true和false就可以了,只有当标志为true时才执行getList()。

  private activated flag:boolean=false

  已激活(){

  this.activatedFlag=true

  }

  停用(){

  this.activatedFlag=false

  }

  @Watch($route )

  routeparamschanged(new params:any,old params:any):void {//通过监听参数的变化再次复制参数。

  if(new params this . activated flag){

  this.getList(newParams)

  }

  }

  这次解决了吗?结果还是不行,routeParamsChanged方法还是会执行两次以上。倒塌..

  

问题解决

  参考上面的解决方案2,最后可以获取实现的参数,调用activated()生命周期钩子函数中获取数据的方法。不用监控路线的变化,只要得到这个就可以得到数据。$route.params.orderId

  private activated flag:boolean=false

  已激活(){

  this.activatedFlag=true

  如果(这个。$ route . params . orderid this . activated flag){

  this.getList(this。$route.params.orderId)

  }

  }

  停用(){

  this.activatedFlag=false

  }

  做完了,终于解决了。我们正在寻找一个轻代码,并有更好的意见或建议。请评论留言指导。

  以上是vue监控路线变化时会多次执行watch方法的原因及解决方法的详细说明。更多关于vue手表法的原因和解决方法,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: