解决vue中的无限循环问题

 更新时间:2020年07月27日 10:20:25   作者:养只猫  
这篇文章主要介绍了解决vue中的无限循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

项目中遇到了这样一个问题:每一种产品有对应的服务费,每一个商家有多种商品要单独计算每一家的服务费,最后汇总总的服务费用。我直接写了一个方法来计算出每个商家和总的服务费用并return出来。如果不看控制台的话运行是没问题的。但是控制台报了无限循环的错误。

下面是错误代码

html:

js:

这里会出现无限循环的原因是数据更新触发计算方法来更新视图,视图更新又反过来触发这个方法更新数据。所以尽量不要直接在绑定的数据上使用方法来绑定。找到问题后下面就是解决办法。

因为选中商品后就要重新计算价格。所以我将选中的商品添加到data里面

然后通过侦听器监听totalBox的变化

当totalBox变化后在执行计算方法。这样就避免一直来回计算的问题

补充知识:vue 排序无限循环问题解决

在vue里对每个数组排序,会出现无限循环的问题,我认为的原因是:

vue动态监听data里数组的变化,数组刚一排序发生变化,vue立马重新执行排序导致无限循环。

解决问题:

1、将要排序的数组命名为全局变量,这样不受vue的监听

2、全局数组赋值vue里的数组时,不要使用=号,这样只是把全局数组的地址指向vue数组地址(用遍历vue数组,push进全局数组里)

代码片段 对数组对象属性进行排序(**************************为解决思路):

var sloveSortList = []; //解决vue中数组排序无限循环的问题 **************************

export default {
data() {
return {
    showSectionList: [], //界面需要显示的断面,还没有进行排序
watch:{

 //列表发生变化
showSectionList: function(){
//传递点位列表数据,给父级reallndex.vue页面
this.leftshowSection(this.showSectionList);

//把showSectionList数组赋值给sloveSortList,如果直接=,相当于引用地址,排序的时候vue监听showSectionList会出现无限循环。
sloveSortList = [];
for(var i=0; i < this.showSectionList.length; i++ ){
sloveSortList.push(this.showSectionList[i]);    **************************
}
//把变化了的列表赋值到准备要排序的sortShowSectionData上
this.sortShowSectionList = this.sortShowSectionData()  **************************

//赋值排好序的数组,为了搜索使用
this.beforeSearchList = this.sortShowSectionList;
//默认选中第一个断面传递给父组件
this.showSectionClick(0);
}

methods: {
//列表排序方法
sortShowSectionData:function(){
var factorNumber = this.nowFactor.factor_code+ 'Level';
if(this.nowFactor.factor_code == undefined || this.nowFactor.factor_code == 'NaN' || this.nowFactor.factor_code == null){
return
}
//对列表进行了排序
var searchList = sloveSortList.sort((a,b)=>{      **************************
var factorNumber = this.nowFactor.factor_code;
if(parseFloat(a[factorNumber]) > parseFloat(b[factorNumber])){
return -1;
} else if(parseFloat(a[factorNumber]) == parseFloat(b[factorNumber])){
return 0;
}else{
return 1;
}
});

return searchList;
},

以上这篇解决vue中的无限循环问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue里面v-bind和Props 利用props绑定动态数据的方法

    vue里面v-bind和Props 利用props绑定动态数据的方法

    今天小编就为大家分享一篇vue里面v-bind和Props 利用props绑定动态数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 基于Vue实现简单的贪食蛇游戏

    基于Vue实现简单的贪食蛇游戏

    贪食蛇是一个非常经典的游戏, 在游戏中, 玩家操控一条细长的直线, 它会不停前进, 玩家只能操控蛇的头部朝向, 一路拾起触碰到之物。本文将用Vue实现这一游戏,感兴趣的可以尝试一下
    2022-04-04
  • vue2.0/3.0的响应式原理及区别浅析

    vue2.0/3.0的响应式原理及区别浅析

    这篇文章主要给大家介绍了关于vue2.0/3.0响应式原理及区别的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Vue实现tab导航栏并支持左右滑动功能

    Vue实现tab导航栏并支持左右滑动功能

    本文给大家介绍利用Vue实现tab导航栏,并且通过flex布局实现左右滑动效果,通过代码给大家分享tab导航栏布局的实现,本文给大家展示了完整代码,需要的朋友参考下吧
    2021-06-06
  • Vite开发环境搭建详解

    Vite开发环境搭建详解

    Vite是一款非常轻量级的Web开发框架,它可以帮助开发者快速搭建一个开发环境。Vite搭建的开发环境可以提供更快的编译速度,更少的配置,更好的性能和更多的开发者友好性,使开发者可以更快地构建出功能强大的Web应用程序。
    2023-02-02
  • vue 如何删除数组中的某一条数据

    vue 如何删除数组中的某一条数据

    这篇文章主要介绍了vue 如何删除数组中的某一条数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue 自定义提示框(Toast)组件的实现代码

    vue 自定义提示框(Toast)组件的实现代码

    这篇文章主要介绍了vue 自定义提示框(Toast)组件的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • vue中计算属性(computed)、methods和watched之间的区别

    vue中计算属性(computed)、methods和watched之间的区别

    这篇文章主要给大家介绍了关于vue中计算属性(computed)、methods和watched之间区别的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • uniapp组件uni-file-picker中设置使用照相机和相册权限的操作方法

    uniapp组件uni-file-picker中设置使用照相机和相册权限的操作方法

    这篇文章主要介绍了uniapp组件uni-file-picker中设置使用照相机和相册的权限,在uniapp中,我们通常会使用uni-file-picker这个组件,但是这个组件中,有点缺陷,就是没有对这个功能的传值设置,这里就要给组件进行修改了,需要的朋友可以参考下
    2022-11-11
  • Vue与React的区别和优势对比

    Vue与React的区别和优势对比

    这篇文章主要介绍了Vue与React的区别和优势对比,帮助大家更好的选择适合自己的前端框架,迷茫的同学可以进来参考下
    2020-12-12

最新评论