VUE组件缓存处理,keep-alive相关应用
需求描述
管理系统中需要增加类似如下的标签页,新创建标签时打开的是不存在缓存的新页面,切换页面时保存表单内容不刷新,关闭标签后从新打开页面又进入到非缓存页面。
之前处理方式
之前处理为每打开一个标签就创建一个与标签拥有对应关系的iframe,这样你在切换标签时实际上是切换对应iframe显示与隐藏,这样好处就是iframe只有在创建时才会加载一次,切换时不做任何处理,当然,也可以添加切换时的处理,但是这样的方式会很麻烦。
第一次处理
想到了VUEX状态管理,做两个router-view 一个用于缓存包裹一个用于非缓存页面,在纪录打开的标签对应的页面,判断该页面切换状态还是新建立状态,然后再决定他的视图出口是缓存状态,还是非缓存状态,当然,这种方法虽然间接显示了该功能,但是存在一些瑕疵,就是触发的实际,你新建页面后进入缓存,但是也只是进入后才进入缓存,在你切换第一次才会缓存下。但是指导研究了keep-alive后我发现…
目前处理方式
keep-alive的三种属性,include ,exclude ,max
include:只有名称匹配的组件会被缓存,
exclude:任何名称匹配的组件都不会被缓存,
max :最多可以缓存多少组件实例
主要使用了include,你可以在全局定义一个数组,这个数组就是关联的标签页,数组内是每个组件的名字,别忘了给每个组件增加一个name。
<keep-alive :include="cachedViews">
<router-view :key="key" name="a" class="router-page"></router-view>
</keep-alive>
cachedViews 就是需要缓存的页面名称
还有问题就是缓存内的处理问题,activated,deactivated。这两个生命周期在切换页面时被缓存的页面所执行的方法。
至此基本解决了这个问题,当然,如果有更好的建议,欢迎大家指出。