vue keep-alive搭配component做带移除选项卡功能的管理页面,如何动态清除指定的组件缓存?
使用keep-alive搭配component:is,以及左侧菜单和选项卡组件,组成一个管理页面,现在要给选项卡加移除按钮。
移除选项卡时,要把keep-alive缓存的对应组件给清掉。
每个被添加的组件,要么基于路径动态导入的组件(()=>import()),要么是通过import from的形式导入的(这种会使用多个实例)。
流程基本是:先调用Vue.component(page_id,mycomponent)注册导入的组件,将page_id变量的内容作为注册的组件名字,然后把page_id赋值给component的is绑定的属性。再把page_id赋值给选项卡组件的v-model绑定的属性
要根据page_id清除指定组件的缓存,清除组件缓存之后,还得根据page_id清除对应的选项卡,以及其他的操作
问题:根据page_id清除指定注册的组件的缓存,请问怎么做?比如需要调用vue自带什么方法?。
代码:
html代码:
<div class="tabs"> <div class="tabHeader">
<div>
<el-tabs v-model="activeName" @tab-click="tabHeaderClick" @tab-remove="removeTab" >
<el-tab-pane v-for="(item) in tab_list" :label="item.label" :name="item.page_id" closable >
</el-tab-pane>
</el-tabs>
</div>
</div>
<div class="tabContent">
<keep-alive>
<component :is="viewName" :key="viewName" :message="page_message" ></component>
</keep-alive>
</div>
</div>
相关vue代码
data() { return {
//动态组件所在文件夹路径
pagePathBase:"../testComponent",
//选项卡绑定属性
activeName: undefined,
//component标签绑定内容
viewName:undefined,
选项卡列表
tab_list:[
],
//子组件参数
page_message:undefined,
菜单列表
menuItems:[
{menu_type:1,label:"菜单1",page_id:"a1",view_type:1,view_path:"/test1.vue"},
{menu_type:2,label:"菜单2",page_id:"a2",children:[
{menu_type:1,label:"子菜单1",page_id:"a3",view_type:2},
{menu_type:1,label:"子菜单2",page_id:"a4",view_type:1,view_path:"/test2.vue"},
]},
{menu_type:1,label:"菜单3",page_id:"a5",view_type:2},
],
};
},
methods: {
removeTab(val){
var index = this.tab_list.findIndex((item) => item.page_id === val);
if(index==-1){
return;
}
this.tab_list.splice(index, 1);
if(val== this.activeName){
this.activeName=undefined;
this.viewName=undefined;
}
},
tabHeaderClick(val){
this.viewName=val.name;
},
//菜单点击
MenuClick(item){
var tabItem = this.tab_list.find((tabItem) => tabItem.page_id === item.page_id);
if(tabItem!=undefined){
this.activeName=tabItem.page_id;
this.viewName=tabItem.page_id;
return;
}
if(item.view_type==1){
//动态导入的组件
var loadComponent = () => import(this.pagePathBase+item.view_path);
Vue.component(item.page_id, loadComponent);
}else if(item.view_type==2){
//静态导入的组件
Vue.component(item.page_id, Test3);
this.page_message = item.page_id);;
}
var obj={page_id:item.page_id);,label:item.label};
this.tab_list.push(obj);
this.activeName=obj.page_id;
this.viewName=obj.page_id;
},
},
回答:
Vue.component(item.page_id, loadComponent);
注册组件的时候,已经用item.page_id做为名称了。这里直接用keep-alive组件的include属性就行了。组件data里添加一个page_id_list存放显示的page_id数组即可
<keep-alive :include="page_id_list">...
</keep-alive>
回答:
Vue并有似乎并提供任何关于清除keep-alive缓存的办法,
你是碰到什么问题了,为什么必须要清除缓存,不清除这些会造成什么样的后果,
以上是 vue keep-alive搭配component做带移除选项卡功能的管理页面,如何动态清除指定的组件缓存? 的全部内容, 来源链接: utcz.com/p/933612.html