我的路由切换有左滑右滑的效果,于是我是这么使用的。
<transition :name="name">
<router-view class="router-view"></router-view>
</transition>
现在我想缓存组件,让列表页返回的时候能保存位置。网上查了下,一般是这么用的
<keep-alive>
<router-view v-if="$route.meta.keepAlive">
</router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
我于是把两者结合起来,这样用
<transition :name="name">
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
</transition>
这样后端构建没问题,但是前端就报错了:
<transition> can only be used on a single element.
报错信息让用transition-group,于是
<transition-group :name="name">
<keep-alive key="keep-alive">
<router-view class="router-view" v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view class="router-view" v-if="!$route.meta.keepAlive" key="not-keep-alive"></router-view>
</transition-group>
结果又报错:
<transition-group> children must be keyed: <keep-alive>
明明是加了key了的。
研究发现transition-group 其实就是一个div或者span等html元素。
于是我尝试自己加这层html。
---- 分割线---
我没有再尝试加这层 html!!!因为我用下面的方式搞定了!
<transition :name="name">
<keep-alive>
<router-view class="router-view" v-if="$route.meta.alive"></router-view>
</keep-alive>
</transition>
<transition :name="name">
<router-view class="router-view" v-if="!$route.meta.alive"></router-view>
</transition>
就是两个transition,一个负责keep-alive组件的动画,一个负责 not-keep-alive的动画。两边各管各的。
如果有隐患,后续我会更新。
最后,请教怎么把问题改成文章的形式。。不知道为什么,提问题的帖子就变成了回答问题的帖子了。。。
另外,请教下大家都是怎么处理这个问题的。、