【发布时间】:2021-02-03 12:27:16
【问题描述】:
我正在构建一个使用 Vue 3 的应用程序,并且我在父组件中提供了一个属性,随后我将其注入到多个子组件中。注入此属性的组件有什么方法可以观察它的变化吗?
父组件看起来像:
<template>
<child-component/>
<other-child-component @client-update="update_client" />
</template>
<script>
export default {
name: 'App',
data() {
return {
client: {}
}
},
methods: {
update_client(client) {
this.client = client
}
},
provide() {
return {
client: this.client
}
},
}
</script>
子组件看起来像:
<script>
export default {
name: 'ChildComponent',
inject: ['client'],
watch: {
client(new_client, old_client) {
console.log('new client: ', new_client);
}
}
}
</script>
我试图实现这一点,当提供的变量在父级中更新时,应该通知其被注入的子级组件。由于某种原因,客户端更新时没有调用客户端监视方法。
有没有更好的方法来做到这一点?
更新
经过进一步测试,我发现这里有一个更大的问题,即使在父组件中更新了客户端之后,在子组件中,客户端属性仍然是原始的空对象并且没有更新。由于提供的属性是响应式的,因此它被注入的所有地方都应该自动更新。
【问题讨论】:
-
您是否为注入的
client添加了反应性? v3.vuejs.org/guide/… -
是的,因为它的值是从 data() 中的属性设置的,所以它是自动响应的。