一,首先,从开启页面缓存开始,在承载具体页面渲染的index.vue(名称随意),而非渲染根页面的App.vue处的单页面路由抽象组件router-view外加上keep-alive (app.vue的根级别router-view只渲染一次) 有几种方式,控制某页面是否缓存:
    1. 两个router-view并列,其中一个包裹在keep-alive之中,用v-if加上每个页面控制当前渲染的页面是开启缓存的还是正常”阅后即焚”的页面。
    2,keep-alive的include&exclude属性 作为attr时候,要包括的路由名用逗号隔开,作为v-bind是路由的component name组成的数组。

    二,如何定制页面缓存
    缓存是否开启,可以通过观察页面的destroy钩子或者activated几个特殊钩子,方法如下:
    1, 定义全局的刷新方法(不推荐)
    如果是在app.vue的router-view或者index.vue的keep-alive处添加v-if=”var”,然后用一个全局方法。将var先赋值为false,再赋值为true,可以实现刷新。结果: 所有页面都会被清空,而不是操作关联的视图。比如在数据集详情页清除一条记录,此时返回会刷新,所有一级页面都会重新加载。
    2,最合理的逻辑是,某项会影响视图的操作执行成功后,记录它影响的页面,把name加入记录中(这里需要name和component name一致),然后在进入操作影响的页面时,刷新它并且删除该条记录。
    3,当前的实现是,在vuex里面维护一个exclude的state数组,也就是接下来需要刷新的页面name集合, 进入有辐射性影响的页面时,记录它可能辐射到的页面,并且mutation添加接下来要清除缓存的页面。重复进入时候,中间会有个array-set转换过程去重,所以一个要执行刷新任务的页面在exclude里只可能有一个数组记录。
    删除的场景是,进入了这个exclude数组包含的页面,此时:exclude已经起作用,这时再清除exclude对应的那条记录。

    issue: 1,需要在某些成功的操作后再调用去缓存,在某些页面数据初始化错误时,不应该再缓存这一页的数据,此时也应该掉本页的缓存。

    补充:登录之后出现页面不发请求的问题,或者因为缓存策略有些东西没有更新(比如在某个主页面inject的VUEX的computed属性)
    1,不发请求是因为默认所有主页面都keep-alive了,所以说在keep-alive组件里,登录后把exclude写满,这样做到了所有内容都刷新。
    2,有些缓存内容不更新,比如说inject注入的内容,就是写一个总体的刷新v-if方法。