Vue.js - как сделать функции, добавленные с новым элементом, независимыми друг от друга

142
08 августа 2018, 07:20

Всем привет. В коде ниже есть два массива - один со значениями, другой используется для счетчика. Не могу понять, почему некорректно работают счетчики (надо, чтобы на каждую кнопку они работали независимо). + Интересует, как сделать так, чтобы счетчик запускался автоматом, без нажатия кнопки. Те загрузили страницу, есть 3 элемента. И сразу счетчики стали считать. Если добавить новый, то в нем отсчет начнется с нуля Ссылка на фидл

new Vue({ 
	el: '#page', 
  data: { 
  	arr: [1, 2 ,3], 
    count: [0, 0 ,0] 
  }, 
  methods: { 
  	addEll: function() { 
    	this.arr.push(this.arr.length + 1); 
      this.count.push(0); 
    }, 
    incrementio: function(val) { 
        interval = setInterval(() => { 
        Vue.set(this.count, this.count[val], 0); 
        this.count[val]++; 
      }, 1000); 
     }, 
  }, 
  computed: { 
  	visibleList: function(){ 
    	return this.arr; 
    } 
  } 
   
})
<script src="https://unpkg.com/vue"></script> 
 
<div id="page"> 
<button v-on:click="addEll">Добавить элемент</button> 
{{ arr }} 
{{ count }} 
  <ul> 
    <li v-for="(item, index) in visibleList"> 
        {{item}} 
        <button v-on:click="incrementio(index)">Счетчик: {{count[index]}}</button> 
    </li> 
  </ul> 
</div>

Answer 1

Решение на JSfiddle

new Vue({ 
  el: '#page', 
  data: { 
    arr: [{ 
      value: 1, 
      counter: 0 
    }], 
    interval: null 
  }, 
  mounted () { 
    this.interval = setInterval(() => { 
      this.arr.map(x => x.counter++); 
    }, 1000); 
  }, 
  beforeDestroy () { 
    clearInterval(this.interval); 
  }, 
  methods: { 
    addEll () { 
      this.arr.push({ 
        value: this.arr.length + 1, 
        counter: 0 
      }); 
    } 
  } 
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script> 
 
<div id="page"> 
  <button v-on:click="addEll">Add</button> {{ arr }} 
  <ul> 
    <li v-for="(item, index) in arr"> 
      {{item.value}} Counter: {{item.counter}} 
    </li> 
  </ul> 
</div>

READ ALSO
Запретить переход на новую строку

Запретить переход на новую строку

Как отменить переход на новую строку после блока div?

142
Как заменить текст в элементе по клику?

Как заменить текст в элементе по клику?

Пробовал также вместоhtml использовать

176
В чем разница между jQurey событиями focusin и focus

В чем разница между jQurey событиями focusin и focus

Есть код с событием focusin который по мне делает тоже самое что и событие focus, не могу понять в чем разница

166
Заменить строку по классу

Заменить строку по классу

В прогресс баре динамично набирается процент (анимация)

157