在 VueJS 中使用 provide/inject 未将数据从 parent 注入到 child
Data not injected from parent to child using provide/inject in VueJS
我正在尝试使用提供和注入将数据从 parent 注入到 child 元素,但数据在 child 元素中不可用。我在组件中添加了相同的数据(注释),如果未注释它是可见的但不是注入的数据。
Hello 正在打印,但未打印传递的数据
TheResource.vue----parent
<template>
<div>
<base-card>
<base-button @click.native="setSelectedTab('stored-resources')">Stored Resources</base-button>
<base-button @click.native="setSelectedTab('add-resource')">Add Resource</base-button>
</base-card>
<component :is="selectedTab"></component>
</div>
</template>
<script>
import StoredResources from './StoredResources';
import AddResource from './AddResource';
export default {
components:{
StoredResources,
AddResource
},
data(){
return{
selectedTab:'stored-resources',
storedResources: [
{
id: 'official-guide',
title: 'Official Guide',
description: 'The official Vue.js documentation',
link: 'https://vuejs.org'
},
{
id: 'google',
title: 'Google',
description: 'Learn to google.....',
link: 'https://google.org'
}
]
};
},
provide:{
resources: this.storedResources
},
methods: {
setSelectedTab(tab){
console.log('Clicked')
this.selectedTab = tab;
}
}
}
</script>
StoredResource.vue --- child
<template>
<ul>
<learning-resources v-for="res in resources"
:key="res.id"
:title="res.title"
:description="res.description"
:link="res.link"></learning-resources>
<h1>Hello</h1>
</ul>
</template>
<script>
import LearningResources from './LearningResources';
export default {
inject: ['resources'],
// data(){
// return{
// resources: [
// {
// id: 'official-guide',
// title: 'Official Guide',
// description: 'The official Vue.js documentation',
// link: 'https://vuejs.org'
// },
// {
// id: 'google',
// title: 'Google',
// description: 'Learn to google.....',
// link: 'https://google.org'
// }
// ]
// };
// },
components:{
LearningResources
}
}
</script>
<style scoped>
ul{
list-style: none;
margin: 0;
padding: 0;
margin: auto;
max-width: 40rem;
}
</style>
来自Vue 3 docs:
To access component instance properties, we need to convert provide
to be a function returning an object
provide() {
return {
resources: this.storedResources
}
}
没有 this
访问权限,除非 provide
是一个函数
我正在尝试使用提供和注入将数据从 parent 注入到 child 元素,但数据在 child 元素中不可用。我在组件中添加了相同的数据(注释),如果未注释它是可见的但不是注入的数据。
Hello 正在打印,但未打印传递的数据
TheResource.vue----parent
<template>
<div>
<base-card>
<base-button @click.native="setSelectedTab('stored-resources')">Stored Resources</base-button>
<base-button @click.native="setSelectedTab('add-resource')">Add Resource</base-button>
</base-card>
<component :is="selectedTab"></component>
</div>
</template>
<script>
import StoredResources from './StoredResources';
import AddResource from './AddResource';
export default {
components:{
StoredResources,
AddResource
},
data(){
return{
selectedTab:'stored-resources',
storedResources: [
{
id: 'official-guide',
title: 'Official Guide',
description: 'The official Vue.js documentation',
link: 'https://vuejs.org'
},
{
id: 'google',
title: 'Google',
description: 'Learn to google.....',
link: 'https://google.org'
}
]
};
},
provide:{
resources: this.storedResources
},
methods: {
setSelectedTab(tab){
console.log('Clicked')
this.selectedTab = tab;
}
}
}
</script>
StoredResource.vue --- child
<template>
<ul>
<learning-resources v-for="res in resources"
:key="res.id"
:title="res.title"
:description="res.description"
:link="res.link"></learning-resources>
<h1>Hello</h1>
</ul>
</template>
<script>
import LearningResources from './LearningResources';
export default {
inject: ['resources'],
// data(){
// return{
// resources: [
// {
// id: 'official-guide',
// title: 'Official Guide',
// description: 'The official Vue.js documentation',
// link: 'https://vuejs.org'
// },
// {
// id: 'google',
// title: 'Google',
// description: 'Learn to google.....',
// link: 'https://google.org'
// }
// ]
// };
// },
components:{
LearningResources
}
}
</script>
<style scoped>
ul{
list-style: none;
margin: 0;
padding: 0;
margin: auto;
max-width: 40rem;
}
</style>
来自Vue 3 docs:
To access component instance properties, we need to convert
provide
to be a function returning an object
provide() {
return {
resources: this.storedResources
}
}
没有 this
访问权限,除非 provide
是一个函数