提问人:edu 提问时间:11/17/2023 更新时间:11/18/2023 访问量:20
在 Vue3/Nuxt3 中根据 Vue3/Nuxt3 中的上一页更改动画
Change animation based on previous page in Vue3/Nuxt3
问:
我目前正在研究向 Nuxt3/Vue3 应用程序的主页添加过渡。我正在为它使用标签:<Transition>
<template>
<Transition name="slide-left" mode="out-in">
...
</Transition>
</template>
我想根据我来自的页面使用不同的过渡,例如,如果我来自“画廊”,过渡名称应该是“左滑”,但如果我来自“介绍”,它应该是“溶解”。我怎样才能做到这一点?
答:
0赞
yoduh
11/17/2023
#1
我找到了一种方法来做到这一点,尽管不可否认,它似乎比它应该的要复杂得多。我也不使用 Nuxt,尽管无论哪种方式,这都可能不会影响答案,如果有的话,更少 import 语句。无论如何,主要障碍是弄清楚以前的路线是什么,因为两者都不包含此信息。我们必须使用 Vue Router 的导航守卫之一,它具有包含我们需要的信息的参数,即 beforeRouteEnter 守卫。useRoute
useRouter
from
另一个问题是将这些信息传递给组件,因为这个导航保护在创建组件之前执行,我最好的想法是使用一个非常简单的可组合项(或者存储可以工作),Vue Router guard 可以写入并且组件可以从中读取。(旁注:我尝试了使用 BeforeRouteEnter 的下一个
参数在 vm
上设置局部变量的方法,虽然我可以设置变量,但这样做时我无法影响过渡动画。可能是防护罩和组件安装的时序问题)
可组合项:prevRoute.js
import { ref } from "vue";
const prevRoute = ref();
export default prevRoute;
组件(BeforeRouteEnter 仅适用于 Options API)<script>
<script>
export default {
beforeRouteEnter(_, from) {
prevRoute.value = from
}
}
</script>
其余部分后跟常规组合 API<script setup>
<script setup>
import { ref } from 'vue'
import prevRoute from '../composables/prevRoute'
const transition = ref('')
if (prevRoute.value) {
if (prevRoute.value.name === 'someRouteName') {
transition.value = 'bounce'
} else {
transition.value = 'slide-fade'
}
}
</script>
示例代码沙盒 -- 导航到 Page1 或 Page2,然后导航回去查看基于 - 的转换。from
评论