transition问题-续

transition问题-续

1、关于search和home等4个页面一样,都是根组件。

(我的理解是都是一级路由,而product才是二级路由)

也就是说从home根组件到了search根组件或是search根组件到了home根组件,应该是都有效果,为啥进入search的时候没有动画效果

2、为什么if渲染的结构需要发生变化才实现动画效果

3、product与search没有效果的原因和处理方法一样吗

4、关于老师说的第三种情况,动态组件的过渡,能否举个小例子帮助理解

https://class.imooc.com/course/qadetail/214162


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,问题解答如下:

1、"同学的进入search的时候,没有就是因为因为进入的时候,离开了跟组件,没有动画效果。但是移出的时候就回到根节点了,符合第四个情况,所以有动画效果" 描述的确实不太好。

2.根组件和组件根节点不是一回事。一个项目有很多组件,那么这么多组件,它们会有一个根组件,即app.vue。而组件根节点意思是一个组件的根元素。例如如下组件中,nav就是这个组件的根节点。

 http://img1.sycdn.imooc.com//climg/5e98ffe709f1483004570258.jpg

3. 在搜索组件和商品详情组件中,动画transition是作为一个组件根节点出现的。符合组件根节点的情况,就可以设置动画。

http://img1.sycdn.imooc.com//climg/5e990023097ce00c06940477.jpg

但为何此时点击进入时没有动画,点击离开时就有动画?老师换一个方式给你通俗的解释一下:

这是因为去执行动画时,要根据<transition name="search">先去识别这个动画,也就是说看到了有这个动画才会执行。<transition name="search">是写在search组件中的。 在点击进入时,此时search组件是没有添加到页面,所以没有识别到就看不到动画效果了。

移出的动画是怎么实现的?这是因为离开之前组件已经添加在页面中了,点击离开时,已经识别到有这个动画了,所以离开时的动画是可以看到的。当彻底离开之后,组件就会销毁,缓存中就没有了。所以下一次点击进入,还是不会有动画。

而这里就是结合<keep-alive>去让组件缓存下来,这样才会有动画。原理不需要深究,这都是vue封装好的,当前固定记住这种方式需要结合<keep-alive>实现效果就行哦。

4.对,v-if是实现进入时的动画。因为刚进入search组件时,是没有效果的。所以在刚进入时用v-if先把search组件隐藏起来了,然后再改变v-if绑定的值让它显示。也就是说,组件添加进来之后,使用v-if做了一次隐藏然后再显示的效果,此时的效果就有动画了。

而离开时的动画实现,在上面已经说过了,组件已经在页面中,能够识别到动画了。

祝学习愉快~

好帮手慕夭夭 2020-04-16 12:08:51

同学你好,问题解答如下:

1.一个项目只有一个根组件。这个案例中,App.vue是根组件,所以同学的说法search根组件,home根组件等是不对的 ,search和home是根组件中使用路由添加进来的内容。

2.之前老师说的4种情况下,是vue官方规定的,固定记住就行。

3. 对,一样的。不过课程中搜索框使用了另一个解决方式,可以参考一下:

<keep-alive>作用是把组件缓存下来。如果不缓存下来,点击搜索需要加载这个组件,看不到动画效果了。缓存中有这个组件之后,就不需要重新渲染,所以能看到动画效果。

http://img1.sycdn.imooc.com//climg/5e97d67b09533c1a04860140.jpg

4.动态组件会涉及到同学没有学过的知识。同学现在基础还比较薄弱,不建议扩展课外内容。先把课程中的学会,等你以后基础打好了,再去学习其他内容哦。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 迷失的小麦 #1
    1、同学的进入search的时候,没有就是因为因为进入的时候,离开了跟组件,没有动画效果。但是移出的时候就回到根节点了,符合第四个情况,所以有动画效果 2、<keep-alive>作用是把组件缓存下来。如果不缓存下来,点击搜索需要加载这个组件,看不到动画效果了。缓存中有这个组件之后,就不需要重新渲染,所以能看到动画效果 这个是2个老师分别的解释,我有点晕 问题:1、感觉老师说的是2种原理。如果说法1是对的,那么问题来了,根组件是app.vue,所以search不可能是根组件,说法不就是不成立?如果说法2是对的,那么问题来了,<keep-alive>和根组件有啥关系?难道添加了<keep-alive>就可以将search变为根组件? 2、添加了v-if是不是只能添加进入的动画。如果是这样,问题是移出的动画是怎么实现的?(可能老师以前讲过,但我希望老师回答过问题1后帮我梳理下) (结合问题1)(如果不是这样,与效果相违背)
    2020-04-16 13:10:02
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师