Используя v-if
, выполняется повторное рендеринг компонентов при каждом изменении this.mode
.Vue сохраняет их в виртуальном DOM, но повторно отображает их, если вы используете v-if
.
Если у вас есть доступ к коду для этих компонентов, рассмотрите возможность использования prop
для v-show
и просмотра его в необязательном порядке.в сочетании с emit
, чтобы вы могли обмениваться данными между родительским и дочерним компонентами, и установите флаг, если он вам нужен, в дочернем и родительском компоненте, если дочерний компонент загружает анимацию изначально, чтобы избежать повторной загрузки.
Это будет один из дочерних компонентов:
<template>
<div v-show="mode === 'themode'">
</div>
</template>
<script>
export default {
props: {
mode: {
type: Boolean,
required: true,
twoWay: true
},
},
data() {
return {
animationLoaded : false,
}
},
mounted(){
},
watch: {
'mode' : function(){
if(this.mode === 'mode' && this.animationLoaded === false){
//load animation and set flag to true, to avoid loading it again.
this.animationLoaded = true;
this.$root.$emit('component-name:animation-loaded');
}
}
},
...
И помещение дочернего компонента в родительский компонент:
<child-component :mode.sync="mode"></child-component>