您可以使用@Provide 装饰器从较高的组件中提供您想要的任何东西,然后使用@Inject 在较低的组件中请求它。例如:
在父组件中,您使用 @Provide(<someKey>) 提供值
//Parent.vue
<template>
<div>The parents value: {{this.providedValue}}</div>
<child />
</template>
<script lang="ts">
import { Component, Vue, Provide} from 'vue-property-decorator';
import Child from './Child.vue';
@Component({components: Child})
export default class Parent extends Vue {
@Provide('key') private providedValue: string = 'The value';
}
</script>
现在我们已经声明了一个名称为 key 的值,它可以被所有子级使用,深度为多个级别:
//Child.vue
<template>
<div>The childs value: {{this.injectedValue}}</div>
</template>
<script lang="ts>
import { Component, Vue, Inject } from 'vue-property-decorator';
@Component
export default class Child extends Vue {
@Inject('key') private injectedValue!: string;
}
</script>
属性 injectedValue 现在将由 Vue 通过向上遍历层次结构注入,直到找到带有键 key 的提供值。
如果您想要类似依赖注入的东西,最好在顶部提供值,您可以在其中创建 Vue 实例:
//index.ts
import Vue from 'vue';
//... imports and configs
new Vue({
el: '#app',
// Provide values by returning a key-value pair
provide: () => ({
'key1': 'value1',
'key2': 'value2'
}),
render: h => h(App)
});
现在你可以在这个 vue 实例的任何组件中使用@Inject('key1')。