vue 触发watch,vue watch执行两次

  vue 触发watch,vue watch执行两次

  本文主要介绍了vue project watch中功能重复触发问题的两种解决方案,帮助大家更好的理解和学习使用vue。感兴趣的朋友可以了解一下。

  

目录

  问题描述:解决方案1解决方案2

  

问题描述:

  有两个页面A和B,每个页面都有一个getList()方法。两种方法都需要传递同一个参数C,参数C的选择过程比较麻烦。为了避免在切换界面A和B时重复选择参数C的问题,我将参数C保存在vuex中,然后使用watch在两个页面中监控参数C来执行getList()方法。然后,发现一个问题。从A页进入B页后,在B页重新选择参数C时会执行A页的getList()方法,反之亦然。将参数C从B页改为A页后,B页的getList()方法也会被执行。

  后来发现是因为用了keep-alive才被使用的。keep-alive总是将Vue实例保存在内存中,所以Vue实例总是存在的,对应的watchers总是生效的。搜索相关资料后发现,很多人也遇到了这个问题。最后,找到了以下两种解决方案:

  

解决方法1

  确定是否通过路由器路径执行getList()。

  观察:{

  someValue(新值,旧值){

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

  //做点什么

  }

  }

  }

  

解决方法2

  添加一个flag参数来判断页面是否活动。使用keep-alive缓存的组件只会触发激活和停用事件,所以在这两个事件被触发时只需将标志设置为true和false,只有当标志为true时才会执行getList()。

  {

  data () {

  返回{

  activatedFlag: false

  };

  },

  观察:{

  someValue(val) {

  if(val this.activatedFlag) {

  this . getlist();

  }

  }

  },

  已激活(){

  this.activatedFlag=true

  },

  停用(){

  this.activatedFlag=false

  }

  }

  如果页面很多,而且每个页面的函数名称不一致,可以把上面代码的watch部分去掉,写成mixin,然后在需要的页面上介绍。

  从“@/mixin/activeFlag”导入active flag;

  导出默认值{

  mixins: [activeFlag],

  观察:{

  someValue(val) {

  if(val this.activatedFlag) {

  this . get lista();

  this . getlistb();

  }

  }

  },

  }

  以上是vue project watch中功能重复触发问题的两种解决方案的细节。更多关于vue手表功能重复触发的解决方案,请关注我们的其他相关文章!

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

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