Это, вероятно, связано с тем, как v-tooltip
работает внутри. Вы можете видеть, что если вы возьмете компонент кнопки вне слота шаблона в компоненте v-tooltip
, переход будет работать правильно.
Компонент v-tooltip
может иметь ловушку уничтожения жизненного цикла, которая просто разрушает визуализированный узел DOM , что может вызвать проблемы. Обходным решением будет сохранить <router-view>
в рабочем состоянии:
<transition name="fade" mode="out-in">
<keep-alive>
<router-view></router-view>
</keep-alive>
</transition>
Однако это может быть нежелательно, особенно если у вас используются очень тяжелые компоненты, используемые маршрутизатором, или если у вас много просмотров быть в живых:
Решение 1: Ограничить максимальное количество компонентов, чтобы остаться в живых
Поскольку вас интересует только исчезновение последнего уничтоженного компонента, вы можете использовать max
атрибут в оболочке <keep-alive>
, так что вы сохраняете только последний уничтоженный элемент. Примерно так будет работать:
<transition name="fade" mode="out-in">
<keep-alive v-bind:max="2">
<router-view></router-view>
</keep-alive>
</transition>
Решение 2. Явно включите компоненты, которые необходимо поддерживать живыми
В качестве альтернативы, вы можете выборочно поддерживать компоненты с <v-tooltip>
живыми. В вашем примере проблема возникает только у компонента Home
, поэтому вы можете дать ему имя:
var Home = {
template: '<div> <h2>Home</h2> <v-tooltip> <template v-slot:activator="{ on }"> <v-btn color="primary" dark v-on="on">Left</v-btn> </template> <span>Left tooltip</span> </v-tooltip> </div>',
name: 'Home'
}
И затем динамически связать массив с атрибутом include
компонента <keep-alive>
:
<transition name="fade" mode="out-in">
<keep-alive :include="componentsToKeepAlive">
<router-view></router-view>
</keep-alive>
</transition>
В вашем JS:
new Vue({
el: '#app',
router: router,
data: {
componentsToKeepAlive: ['Home']
}
});