vuejs проблема с анимацией при удалении элемента из списка

Я пытаюсь удалить элемент списка с некоторой анимацией, проблема в том, что удаленный элемент является последним, который работает нормально, но если я удаляю какой-либо элемент, кроме последней, анимация не работает должным образом, см. Здесь: https://jsfiddle.net/49gptnad/1003/

JS код:

Vue.component('hello', {
    template: '<transition name="bounce"><li>{{ind}} <a @click="removeit(ind)">remove</a></li></transition>',
  props: ['ind'],
  methods: {
    removeit(ind) {     
        this.$emit('removeit')
    }
  }
})

var vm = new Vue({
  el: '#vue-instance',  
  data: {
    list: [1,2,3,4,5,6,7,8,9,10]
  },
  methods: {
    removeit (extra, index) {
        this.list.splice(index, 1)
    }
  }
});

HTML

<div id="vue-instance">
  <ul>
    <hello v-for="(item,index) in list" :ind="item" @removeit="removeit('extra', index)"></hello>
  </ul>
</div>

CSS

.bounce-enter-active {
  animation: bounce-in .7s;
}
.bounce-leave-active {
  animation: bounce-in .7s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.20);
  }
  100% {
    transform: scale(1);
  }
}

1 ответ

Хорошо, в первую очередь вы должны использовать transition-group, подробнее.

<div id="vue-instance">
  <ul>
    <transition-group name="bounce" tag="p">
      <hello v-for="item in list" 
             :key="item" // You should use your property, (item.ID)
             :ind="item"
             @removeit="removeit('extra', item-1)">
      </hello>
    </transition-group>
  </ul>
</div>

Вам нужно определить : ключ и вам следует избегать индексации и использовать ваше свойство, например item.ID. Это вызывает некоторые проблемы, если вы используете его для удаления элемента.

Я настроил несколько вещей, вы можете проверить это здесь: https://jsfiddle.net/49gptnad/1006/

Другие вопросы по тегам