按需组件的 Vue 转换模式不起作用
Vue transition mode on on-demand components not working
我有一个包含多个页面的 SPA。这些页面是组件,使用 web pack 的代码拆分按需加载。
页面用 <transition mode="out-in">
标签包裹,但是,顺序转换不适用于初始组件加载。
这是一个重现错误 https://github.com/ByEmke/vue-transition-mode-issue 的 git 回购协议。
[编辑]
我想强调关于过渡模式的问题。它是不起作用的过渡模式。 'out-in' 应该缓和消失的元素并缓和出现的元素,这应该按顺序发生,但是,它是并行发生的(因为没有设置过渡模式)。它不适用于初始组件加载(您可以在 Github 的示例中清楚地看到它在 运行 时),但在之后切换时它可以正常工作。
这是显示问题的 gif http://recordit.co/mtiNGNUNCp
我认为您在转换节点上缺少 appear
指令
<transition appear>
<!-- ... -->
</transition>
来自文档 here
编辑:
有了更多信息,我认为这是 main.vue
中的过渡 css
<style lang="sass">
h2 {
&.ease-enter-active, &.ease-leave-active {
transition: opacity 1s ease;
}
&.ease-enter, &.ease-leave-active {
opacity: 0;
}
}
</style>
试试这个
<style lang="sass">
.ease-enter-active, .ease-leave-active {
transition: opacity 1s ease;
}
.ease-enter, .ease-leave-active {
opacity: 0;
}
</style>
所以现在,我要坚持使用猴子补丁,由亲戚 div 包装我的页面并将页面绝对放置在顶部。
P.S。如果页面下方有一些内容,则此补丁将不起作用,因为父级的高度为 0。它适用于我的用例,但当需要 on- 下方的内容时需要进行更多修改需求成分。
按照 github 示例,模板现在是这样的:
<div id="app">
<div>
<transition name="ease" mode="out-in" appear>
<component :is="page"></component>
</transition>
</div>
<button @click="first">First page</button>
<button @click="second">Second page</button>
</div>
和样式:
div {
position: relative;
}
h2 {
position: absolute;
top: 0;
&.ease-enter-active, &.ease-leave-active {
transition: opacity 0.2s ease;
}
&.ease-enter, &.ease-leave-active {
opacity: 0;
}
}
我有一个包含多个页面的 SPA。这些页面是组件,使用 web pack 的代码拆分按需加载。
页面用 <transition mode="out-in">
标签包裹,但是,顺序转换不适用于初始组件加载。
这是一个重现错误 https://github.com/ByEmke/vue-transition-mode-issue 的 git 回购协议。
[编辑] 我想强调关于过渡模式的问题。它是不起作用的过渡模式。 'out-in' 应该缓和消失的元素并缓和出现的元素,这应该按顺序发生,但是,它是并行发生的(因为没有设置过渡模式)。它不适用于初始组件加载(您可以在 Github 的示例中清楚地看到它在 运行 时),但在之后切换时它可以正常工作。
这是显示问题的 gif http://recordit.co/mtiNGNUNCp
我认为您在转换节点上缺少 appear
指令
<transition appear>
<!-- ... -->
</transition>
来自文档 here
编辑: 有了更多信息,我认为这是 main.vue
中的过渡 css<style lang="sass">
h2 {
&.ease-enter-active, &.ease-leave-active {
transition: opacity 1s ease;
}
&.ease-enter, &.ease-leave-active {
opacity: 0;
}
}
</style>
试试这个
<style lang="sass">
.ease-enter-active, .ease-leave-active {
transition: opacity 1s ease;
}
.ease-enter, .ease-leave-active {
opacity: 0;
}
</style>
所以现在,我要坚持使用猴子补丁,由亲戚 div 包装我的页面并将页面绝对放置在顶部。
P.S。如果页面下方有一些内容,则此补丁将不起作用,因为父级的高度为 0。它适用于我的用例,但当需要 on- 下方的内容时需要进行更多修改需求成分。
按照 github 示例,模板现在是这样的:
<div id="app">
<div>
<transition name="ease" mode="out-in" appear>
<component :is="page"></component>
</transition>
</div>
<button @click="first">First page</button>
<button @click="second">Second page</button>
</div>
和样式:
div {
position: relative;
}
h2 {
position: absolute;
top: 0;
&.ease-enter-active, &.ease-leave-active {
transition: opacity 0.2s ease;
}
&.ease-enter, &.ease-leave-active {
opacity: 0;
}
}