为了账号安全,请及时绑定邮箱和手机立即绑定

vue keep-alive同一个组件如何实现状态切换

vue keep-alive同一个组件如何实现状态切换

杨魅力 2019-01-29 06:38:21
路由配置}, {    path: '/submit',    component: resolve => {        require(['./pages/sb.vue'], resolve);    },    meta: {keepAlive: true}}, {app.vue配置<!-- 这里是需要keepalive的 --><keep-alive>    <router-view v-if="$route.meta.keepAlive"></router-view></keep-alive><!-- 这里不会被keepalive --><router-view v-if="!$route.meta.keepAlive"></router-view>点击A页面的元素跳转到B页面,从B页面返回的时候可以保留A页面的历史记录和缓存。(上面配置可以实现)但是,当从C页面点击进入A页面的时候不希望保留A页面的缓存和记录。请问如何动态的控制该页面的状态呢?
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

解决方案如下:

step1


vuex的store里面初始化值,如下操作:


export default new Vuex.Store({

    state: {

        submitCache : true,

        vmRoute : '',

step2


main.js里面判断路由,修改字段值:


router.afterEach(function(transition){


    //不缓存

    if ( (...) || (...)) {

        store.state.submitCache = false;

    }

    if(transition.path == '/xxx'){

        store.state.vmRoute = transition.path;

    }else{

        store.state.vmRoute = '';

    }

})


step3


app.vue如下修改,判断组件缓存逻辑:


<keep-alive>

    <router-view v-if="isCache && vmRouter"></router-view>

</keep-alive>

<router-view v-if="!isCache || !vmRouter"></router-view>

拿到所需字段:


computed: {

    isCache : function(){

        return this.$store.state.submitCache;

    },

    vmRouter: function(){

        return this.$store.state.vmRoute;

    }

}


查看完整回答
反对 回复 2019-01-31
  • 1 回答
  • 0 关注
  • 341 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信