Vue @click 计数器并为可重用组件更新背景 2 分钟

Posted

技术标签:

【中文标题】Vue @click 计数器并为可重用组件更新背景 2 分钟【英文标题】:Vue @click counter and update background for 2 minutes for reusable component 【发布时间】:2020-10-23 17:52:55 【问题描述】:

我有一个可重用的 vue 组件,它基本上是一个用户卡,可以为多个用户显示一组数据。 我想要做的是当点击特定用户角落里的alert一词时,该用户卡的背景将改变颜色2分钟,然后恢复到以前的方式,但它会添加警报旁边的数字 1 并随着每次点击而不断增加。

到目前为止我有:

<div class="card"  v-for="(item, index) in arrays" :key="item.id" v-bind:id="item.name">
<div class="l"  v-on:click="greet()" >Alertcount</div>

这是我点击警报并显示计数器的地方。

 data () 
    return 
      count: null,
      arrays: [
      
         name: 'John',
      ,
      
        name: 'Alice',
       
      ]

...

还有一个改变颜色和计数器的功能:

greet: function (event) 
     
   var name = this.arrays[1]['name'];
     
     
   var orig = document.getElementById(name).style.background;
   document.getElementById(name).style.background = '#454647';
   setTimeout(function()
        document.getElementById(name).style.background = orig; 
   , 3000);
   
      this.count = this.count + 1;  
      
      
      // setInterval(function()(document.getElementById(name).style.background = 'blue'), 3000);
    
    ,

我有 2 个问题,1. 计数器会更新并显示所有卡片,而不仅仅是我点击的卡片。 2. 为了定位我单击的卡片以更改背景,我添加了数组 [1] 以测试它在该用户上的工作,但我需要一种方法来根据我单击的用户卡片进行更改。

非常感谢!

【问题讨论】:

【参考方案1】:

因此,您需要每张卡/每个人都有单独的计数器,例如:

data () 
    return 
      arrays: [
      
         name: 'John',
         count:0
      ,
      
        name: 'Alice',
        count:0
       
      ]
     ...

然后您可以将数组的索引传递给您的函数,例如:

<div class="card"  v-for="(item, index) in arrays" :key="item.id" v-bind:id="item.name">
  <div class="l"  v-on:click="greet(index)" >Alertarrays[index].count</div>
</div>

然后

greet: function (arrIndex) 
     
   //var name = this.arrays[1]['name'];
     
     
   var orig = document.getElementById(this.arrays[arrIndex].name).style.background;
   setTimeout(function()
        document.getElementById(this.arrays[arrIndex].name).style.background = orig; 
   , 3000);
     
      this.arrays[arrIndex].count++
      //this.count = this.count + 1; 

      // setInterval(function()(document.getElementById(name).style.background = 'blue'), 3000);
    
    

【讨论】:

非常感谢,颜色已正确更改!但是,计数器仍然为所有卡片显示相同的数字,有什么方法可以显示每张卡片被点击了多少次警报? 每张卡需要单独的计数器吗? 是的,我需要每张卡片显示他们的卡片被点击了多少次提醒 @YJay 我编辑了我的代码来做计数器,试试吧。 谢谢!当我尝试单击它时,我收到一条错误消息,上面写着“未捕获的类型错误:无法读取未定义的属性 '2'”。

以上是关于Vue @click 计数器并为可重用组件更新背景 2 分钟的主要内容,如果未能解决你的问题,请参考以下文章

在与 v-for @click 方法不同的 vue 组件中调用函数

如何将参数传递给Vue组件并在组件模板中重新使用其值

在Vue中将echart封装为可复用组件

Django:为可重用模型字段创建一个 Mixin

取消 vue 组件中的属性更新

Vue 开发实战基础篇 # 8:如何触发组件的更新