vue3 transition 在布局组件中不起作用

vue3 transition do not work inside layout component

提问人:Wadkan 提问时间:11/18/2023 最后编辑:Wadkan 更新时间:11/19/2023 访问量:32

问:

我想在我的 Vue3 SPA 中使用一些过渡。 我使用 Vuetify 和 vue-router。

我在两个地方''''''。 如果将转换放入 App.ejvue 中,它可以正常工作,但仅限于整个应用程序加载时。 但是,如果我尝试将过渡组件放在我的布局结构中,那么我在 App.vue 中使用的完全相同的过渡将没有任何作用。 会有什么问题?

// App.vue
<template>
  <router-view v-slot="{ Component }">
    <transition name="slide">
      <component :is="Component" />
    </transition>
  </router-view>
</template>

<style scoped>
.wrapper {
  width: 100%;
  min-height: 100vh;
}

.slide-enter-active,
.slide-leave-active {
  transition: all 0.75s ease-out;
}
// further css
</style>

但是,如果我尝试在我的布局中使用它,它什么也做不了。 问题出在哪里?

// DefaultLayout.vue
<template>
  <v-app>
    <top-bar />
    <default-view />
    <bottom-bar />
  </v-app>
</template>

<script setup>
// imports
</script>

// DefaultView.vue
<template>
  <v-main class="mt-3 ml-2 mr-2">
    
      <router-view v-slot="{ Component }">
        <transition name="slide">
          <component :is="Component" />
        </transition>
      </router-view>
  
  </v-main>
</template>


<style scoped>
.wrapper {
  width: 100%;
  min-height: 100vh;
}

.slide-enter-active,
.slide-leave-active {
  transition: all 0.75s ease-out;
}

// further css
</style>

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'

const routes = [
  {
    path: '/',
    component: () => import('@/layouts/default/DefaultLayout.vue'),
    children: [
      {
        path: '',
        name: 'home',
        component: () => import(/* webpackChunkName: "home" */ '@/views/HomeView.vue'),
        meta: { requiresAuth: false },
      },
    ],
// ... other routes defined here
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes,
})

export default router
vuejs3 css-transitions vue-router vuetifyjs3

评论

0赞 Moritz Ringler 11/21/2023
当我尝试时,可以按预期工作。考虑为您的问题添加沙盒或类似内容

答:

0赞 Riz 11/19/2023 #1

您应该只应用一次过渡,要么在两者中,要么因为将过渡应用于两者中的元素并不理想。 过渡涵盖应用程序内的所有路由,包括在组件内部呈现的路由,但是当您再次应用过渡时,它不会产生任何影响,因为过渡已在根级别应用。App.vueDefaultView.vuerouter-viewApp.vueDefaultView.vueDefaultView.vue

评论

0赞 Wadkan 11/20/2023
是的。我想应用一次,但它仅适用于 App.vue,但我在其他地方需要它。如果我将它留在 App.vue 中,它只会在我第一次在浏览器中打开我的应用程序时进行过渡,但当我使用客户端路由器从一个页面导航到另一个页面时,它什么也做不了。