美文网首页
30.vue keep-alive,transition,路由

30.vue keep-alive,transition,路由

作者: yaoyao妖妖 | 来源:发表于2018-08-22 15:12 被阅读59次

    在使用history.back(),这种返回的界面,再次进入的时候声明周期函数都会重新调用

    history.go(),
    history.back(),//后退一页
    history.forward()//前进一页
    window.history.go(-1);//后退一页
    window.history.go(-n);//后退n页
    window.history.go(1);//前进一页
    window.history.go(n);//前进n页
    window.history.go(0);//刷新页面
    

    但是通过this.$router.push 的方式再次进入的界面如果界面内容没有任何改变的话,不会再次调用下面的生命周期函数

    beforeCreate(创建前)
    created(创建后)
    beforeMount(载入前)
    mounted(载入后)
    beforeUpdate(更新前)
    updated(更新后)
    beforeDestroy(销毁前)
    destroyed(销毁后)
    

    1.当项目中使用了keep-alive之后,mounted,destroyed函数将不会被调用,反之会调用activated和deactivated函数。
    2.keep-alive是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。<keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。
    3.在没有使用keep-alive的项目中,通过history.back()这种方式返回的界面重新进入时相当于是一个全新的界面进入。
    4.router-view代表的内容是router设置的路径下对应的界面。
    5.当使用嵌套路由的时候,keep-alive函数只对最外层的路由函数起作用,而对于内部的子路由无法实现页面的缓存,这时可以通过2层keep-alive实现子路由的缓存。

    就是在子路由的入口那里在添加一层keep-alive

    1. 不要使用两个transition包裹,会导致缓存界面到非缓存界面,动画出错
    2. 不要使用route.meta.keepAlive的方式会导致当页面缓存为true到false的界面,会自动调用true界面的destory,然后当false界面回到true界面的时候,按照全新的界面即调用mounted又调用activated,导致出错
    3. 正常的情况应该是无论怎样跳转,除了第一次,不会在调用mounted,而是调用activated
    4. add, delete, release代表路由中name对应的名字
        <transition :name="transitionName">
          <keep-alive exclude="add, delete, release">
            <router-view class="child-view"></router-view>
          </keep-alive>
           <!-- <router-view class="child-view" v-if="!$route.meta.keepAlive"></router-view> -->
        </transition>
    

    相关文章

      网友评论

          本文标题:30.vue keep-alive,transition,路由

          本文链接:https://www.haomeiwen.com/subject/vmhyiftx.html