这是一个简单的问题,但我不知道使用Vue2正确执行此操作的最佳方法:
父组件:
<template>
<div class="parent">
<child></child>
{{value}} //How to get it
</div>
</template>
子组件:
<template>
<div class="child">
<p>This {{value}} is 123</p>
</div>
</template>
<script>
export default {
data: function () {
return { value: 123 }
}
}
</script>
答案 0 :(得分:2)
您可以通过以下方式实现这一目标:
您可以通过ref直接访问子VM,但这会变得毛茸茸,因为在子组件已挂载之前不会填充ref,并且$refs
不是被动的,这意味着你'我必须像这样做一些hacky:
<template>
<div class="parent">
<child ref="child"></child>
<template v-if="mounted">{{ $refs.child.value }}</template>
</div>
</template>
data() {
return {
mounted: false
}
},
mounted() {
this.mounted = true;
}
$emit
子组件中的值,以便父级可以在准备就绪或每次更改时获取该值。
答案 1 :(得分:1)
子组件通过发出事件将数据传递回层次结构。
例如,在父级中,侦听事件并将子值添加到本地值(多个子元素的数组将是谨慎的),例如
<child @ready="childVal => { value.push(childVal) }"></child>
并在子组件中$emit
创建/安装事件,例如
mounted () {
this.$emit('ready', this.value)
}