美文网首页
vue生命周期钩子函数actived没有执行

vue生命周期钩子函数actived没有执行

作者: jinya2437 | 来源:发表于2019-01-15 12:21 被阅读36次

    调用actived钩子函数,发现代码没有执行.......为什么

    • 背景技术选型:vue+vue-router+vuex

    第一步:路由配置文件设置keepAlive=true

    //index.js
    import Vue from 'vue'
    import Router from 'vue-router'
    Vue.use(Router)
    
    export default new Router({
      routes: [
        {
          path: '/Classify',
          name: 'Classify', 
            // 设置keepAlive属性
          meta: {
            keepAlive : true 
          },
          component: resolve => require(['@/views/classify/Classify'], resolve)
        }
      ],
      mode:'history'
    })
    

    第二步:标注需要缓存的组件,用<keep-alvie>包裹

    <!--app.vue-->
    <template>
        <div id="app">
            <!--需要缓存组件-->
            <keep-alive>
                <!--router-view组件是一个 functional 组件,渲染路径匹配到的视图组件-->
              <router-view v-if="$route.meta.keepAlive"></router-view>
            </keep-alive>
            <!--不需要缓存组件-->
            <router-view v-if="!$route.meta.keepAlive"></router-view>
            <moduleFooter></moduleFooter>
        </div>
    </template>
    

    第三步:activated函数调用

    //Classify.vue
    activated () {
      console.log("activated调用了");
    }
    

    总结

    • 在router中设置需要缓存的组件
    • <keep-alive>包裹需要缓存组件
    • 页面第一次进入,钩子的触发顺序created-> mounted-> activated,退出时触发deactivated。当再次进入(前进或者后退)时,只触发activated
    • 可以动态控制是否缓存组件,代码如下:
    beforeRouteLeave(to, from, next) {
      // 设置下一个路由的 meta
      to.meta.keepAlive = false; // 不缓存,即刷新
      next();
    }
    
    

    相关文章

      网友评论

          本文标题:vue生命周期钩子函数actived没有执行

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