#vue.js #vuejs2
Вопрос:
У меня есть этот Vue transition-group
ниже. Это работает правильно, но проблема в том, что когда какой-либо элемент в цикле обновляется ( hash
изменяется, что используется для ключа), группа перехода запускает анимацию для этого обновленного элемента (каждый раз, когда он обновляется).
Мне нужно, чтобы он анимировал элементы только один раз, когда они добавляются в items
массив (элементы добавляются с items.unshift(newItem)
)
<transition name="notification-transition">
<custom-component
v-for="item in items"
:key="'item-' item.hash"
></custom-component>
</transition>
.notification-transition-enter-active {
transition: all 0.5s ease;
}
.notification-transition-leave-active {
transition: all 0s ease;
}
.notification-transition-enter,
.notification-transition-leave-to {
opacity: 0;
transform: translateX(256px);
}
В документах Vue упоминается, что он запускается «при вставке, обновлении или удалении элементов из DOM», но ничего не говорится о том, как ограничить его только inserted
removed
событием and.
Ответ №1:
Я нашел проблему. Это повторно запускает переход , потому что свойство item.hash
, используемое для ключа, изменяется. Я должен использовать какое-то статическое свойство ключа, которое не меняется
<transition name="notification-transition">
<custom-component
v-for="item in items"
:key="'item-' item.staticHash"
></custom-component>
</transition>