首先在router中配置当前路由是否被缓存
{path: '/demo1',
name: 'demo1',
meta: {
keepAlive: true // 需要缓存
},
component: resolve => { require(['../view/demo1.vue'], resolve) }
},
{
path: '/demo2',
name: 'demo2',
component: resolve => { require(['../view/demo2.vue'], resolve) },
meta: {
keepAlive: false // 不需要缓存
}
},
在app.vue中设置缓存的router-view
<keep-alive>
<router-view v-if="$route.meta.keepAlive" class="ui-view" :transition="effect" transition-mode="out-in"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" class="ui-view" :transition="effect" transition-mode="out-in"></router-view>
目标: 从demo1跳转到demo2 从demo2传值到demo1这时demo1的created是不会触发的
keep-alive提供了2个方法
activated: function () {
// 当组件被缓存时 created不会触发 此时activated会触发
},
deactivated: function () {
}
// 传值可以使用vuex 或者使用公共的bus
eg: eventBus.js
import Vue
from
'vue'
/**
* 定义空的vue实例,作为 eventbus实现非父子组件之间的通信(vue2.x中去掉了broadcast)
*/
var eventBus
=
new
Vue({})
export
default eventBus
在需要的页面引入 demo2
import enentBus
from
'.eventBus.js'
enentBus.
$emit
(
'add'
,
'11212'
)
/调用router回退页面
this.$router.
go(
-
1); // 在这里为什么使用回退 因为安卓不好监听这个页面回退 所以前端处理比较好
demo1
activated (){
enentBus.
$on(
'add',
function(
data){
this.searchParams
= data; //
this
.searchParams 是我在data定义的值 当从demo2跳转到demo1时会触发这个生命周期钩子
}.
bind(
this))
}