provide和inject这对选项需要一起使用,一个祖先组件可以通过provide向所有子孙后代注入一个依赖,某一子孙组件也可通过inject接收这一依赖,并不只限于父子组件之间。
provide:Object | () => Object
inject:Array<String> | {[key: String]: String | Symbol | Object}
provide 应是一个对象,或者一个返回值类型为对象的函数;
inject 应该是一个字符串数组,这些字符串应该是provide 中的key;或者一个对象
在vue工程中,可通过 provide 和 inject 定义一个刷新当前页的方法。具体实现如下:
在App.vue文件(祖先)中,定义provide:
<template>
<div id="app">
<router-view v-if="isRouterAlive" />
</div>
</template>
<script>
export default {
name: ‘App‘,
provide() {
return {
reload: this.reload
}
},
data() {
return {
isRouterAlive: true
}
},
methods: {
reload() {
this.isRouterAlive = false
// 此处使用 this.$nextTick 是为了实现异步的效果
this.$nextTick(function() {
this.isRouterAlive = true
})
}
}
}
</script>
在需要使用刷新当前页功能的子孙组件中,使用 inject 引入provide中的reload:
<script>
export default {
name: ‘Test‘,
inject: [‘reload‘],
data() {
return {
}
},
methods: {
detail(row, index) {
const query = {
INQUIRY_FLOW_ID: row.INQUIRY_FLOW_ID + ‘‘,
PROJECT_ID: this.projectId + ‘‘,
ORDER_ID: row.ORDER_ID + ‘‘,
};
// 从当前页面跳转到 当前页面 时,vue 不会主动刷新当前页面
this.$router.push({
name: ‘Test‘,
});
// 所以,调用祖先组件的 provide 的 reload 方法进行手动刷新
this.reload();
}
}
}
</script>
原文:https://www.cnblogs.com/upward-lalala/p/14673047.html