参考文章:Vue中切换页面时的过渡动画_zhangxu0215的专栏-CSDN博客
根据此作者写的文章修改了一些样式符合我的系统搞定了过度动画,但是会出现一些动画左右错乱的现象,原因是因为meta.index大小不一,所以应该自行根据小窗口的List进行排序即可。
watch: {
//使用watch 监听$router的变化
$route(to, from) {
let toIndex = 0;
let fromIndex = 0;
this.$store.state.tagsView.visitedViews.forEach((item,index)=>{
if(item.path == to.path){
toIndex = index;
}else if(item.path == from.path){
fromIndex = index;
}
})
//如果to的索引值为0,不添加任何动画;如果to索引大于from索引,判断为前进状态,反之则为后退状态,(原为to.meta.index)
if (toIndex < fromIndex) {
this.transitionName = "slide-right";
} else {
this.transitionName = "slide-left";
}
}
},
每个系统中的小窗口列表在store都不太一样,自己查找一下哈,本人的是this.$store.state.tagsView.visitedViews。
然后是和缓存之间有冲突,如果使用v-if="$route.meta.keepAlive",会报错,所以我们改用include的方式。
<transition :name="transitionName">
<keep-alive include="keepAlive">
<router-view></router-view>
</keep-alive>
</transition>
每个需要缓存的页面加上name即可。只要有name就被缓存了
export default {
//写此name即为开启缓存
name:'keepAlive',
data () {
return {
}
}
}
被缓存的页面还会出现不刷新的现象,我们需要的是查询参数被缓存,但是列表需要刷新所以要用beforeRouteEnter进行操作。
methods: {
getInfo () {
//列表查询接口
}
},
beforeRouteEnter (to, from, next) {
next(vm =>{
vm.getInfo();
});
},
created(){
//不需要开始加载了,改用路由进入加载
//this.getInfo();
}
|