@gangrena777

Vuejs проблемы с реактивностью?

html
<div id="app" >
  <h2>Todo:</h2>
  <ol class='tasks'  >
    <t-element v-for='t in todos' :t='t'  ></t-element>
  </ol>
  <h3>
    Add new task:
  </h3>
  <input  v-model="newt" type='text'/>
  <button @click="addt"   >
    Add task
  </button>
</div>

js
Vue.component('t-element',{
  props : ['t'],
  data : function () {
},
  template : `<li>
      <label>
        <input type="checkbox"
 >
        <span >
          {{ t.text }}:{{t.timeput}}
        </span>
  
      </label>
    </li>`,
});

new Vue({
  el: "#app",
  data: {
    todos: [
   { text: "t" timeput:20 },
   { text: "tt", timeput:1},
   { text: "ttt", timeput:19 },
   { text: "tttt", timeput:100 }
    ],

    newt : "",
 },
  mounted (){
   this.todos.forEach(function(s){
      
       s.timeput  = setInterval(function(){
          s.timeput += 1;
         }, 1000);
      });
   
  
  },
  
  
  methods: {
 
    addt: function(){

    
     this.todos.push({
       text:this.newt,
   
       timeput:2
    });
    this.newt = '';
    },

  }
  });

Суть вот в чем....
есть массив данных....в mounted происходит инкрименация свойства timeput всех элементов массива...
но при добавлении нового элемента в массив ...значение timeput нового элемента не меняется
  • Вопрос задан
  • 330 просмотров
Решения вопроса 1
метод mounted() срабатывает только один раз, когда компонент размещается.

После добавления нового элемента mounted() не вызывается и таймер для добавленного не заводится.

Незачем делать по индивидуальному таймеру для каждого элемента. Сделайте один таймер на весь компонент, по его срабатыванию обновляйте все элементы:
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы