如何在vue中循环嵌套数组并每5秒显示一次数据?

Posted

技术标签:

【中文标题】如何在vue中循环嵌套数组并每5秒显示一次数据?【英文标题】:How to loop over nested array in vue and display data every 5 seconds? 【发布时间】:2020-10-19 18:55:58 【问题描述】:

我正在使用 Vue Js,我有一个这样的嵌套数组:

    arrays: [
      
         name: 'Max',
         Info: [60, 75, 70, 85, 65], 
      ,
      
         name: 'Dave,
         Info: [70, 95, 60, 65, 83], 
      ,
     ]

我有一个用户个人资料框,其中显示每个用户的姓名和信息。

<div class="outer"  v-for="(item, index) in arrays" :key="item.id" v-bind:id="item.name">

我想在模板中显示信息:

<div class="box c" >Info<span v-for="info in item.Info">info</span></div> 

当我这样做时,它为正确的用户显示了正确的数组,但它显示了所有数字 但我希望信息只显示每个数字 5 秒,直到最后一个数字。因此对于 Max,它将显示 60 然后等待 5 秒,然后仅显示 75 等待 5 秒等,直到它停在最后一个数字并只显示该数字。

我尝试创建一个函数:

  appendInfo: function() 
    
 for (let i = 0, l = this.arrays.length; i < l; i++) 
    let info = this.arrays[i]['Info'];
 
    
 let timer = 0;
   
    for (let i = 0; i < info.length; i++) 
      setTimeout(() => this.rate = info[i], timer);
      timer = timer + 5000;
      
  
    

并将数据传递给速率

return 
      count: null, 
      rate: [],

并在模板中使用了 rate

<div class="box c" >Info<span>rate</span></div>

但它只显示两个配置文件的第二个用户配置文件的数据。

所以我想知道是否有一种方法可以使用 v-for 执行此操作,或者我可以如何修改我的函数? 谢谢!

更新

我像这样使用 RateDisplayer 组件:

<div class="outer"  v-for="(item, index) in arrays" :key="item.id" v-bind:id="item.name">
  <rate-displayer :rates="item.Info" />

import RateDisplayer from './RateDisplayer'
export default 
  name: 'card',
  props: 
            rates: 
                required: true,
            
        
        ,
  data () 
    return 
      interval: 5000,
      rate: false,
...

但仍然只显示最后一个数组值。

已修复

我从父组件中移除了:

props: 
            rates: 
                required: true,
            

        ,
 
      interval: 5000,
      rate: false,

现在它正在工作,再次感谢!

【问题讨论】:

【参考方案1】:

我以前做过类似的事情。首先,我建议您为此部分创建一个组件:

<div class="box c" >Info<span>rate</span></div>

然后,在此组件中,您可以接受速率作为道具,并将每 5 秒的速率设置为新的。比如:

<template>
    <div class="box c" v-if="rate">Info<span>rate</span></div>
</template>

 export default 

   name: "RateDisplayer.vue",
        props: 
            rates: 
                required: true,
            
        
        ,
        data() 
            return 
                interval: 5000,
                rate: false
            
        ,
    mounted() this.nextOrStop(-1) ,
    methods:  
      nextOrStop(current)
      
         if(current === this.rates.length-1)   return 
         setTimeout( () => 
             const index = current+1;
             this.rate = this.rates[index];
             this.nextOrStop(index)
             , this.interval)

    

  ....

你可以像这样在你的父组件中插入这个组件:

<div class="outer"  
     v-for="(item, index) in arrays" 
    :key="item.id" 
     v-bind:id="item.name">

         <rate-displayer :rates="item.Info" />
</div>

【讨论】:

非常感谢,这非常有用!尽管它只显示最后一个数组的信息,但我仍然遇到问题。它每 5 秒显示一次每个数字,但仅显示每个用户的最后一个数组中的数字。有没有办法可以显示每个用户正确的数组值? 我刚刚更改了答案,包括您应该如何在父组件中使用新组件。 谢谢!不过似乎仍然只显示最后一个数组的数字。 这不应该发生。您能否在原始答案中粘贴一个更新,说明您是如何使用此组件的?您描述的行为通常发生在未命名的组件上。 谢谢,我已经更新了我如何使用该组件。

以上是关于如何在vue中循环嵌套数组并每5秒显示一次数据?的主要内容,如果未能解决你的问题,请参考以下文章

以固定的时间间隔执行for循环,例如。每5秒获取一次图[重复]

如何在 Vue.js 中收集没有重复的嵌套数据?

swiper2.0 有没有点击左右按钮循坏滚动

vue 第一次axios请求得到一个数组,然后根据循环数组获得id进行第二次axios请求,请问如何处理速度最快?

无合金钛螺纹

Vue递归组件实现层层嵌套显示数据