子コンポーネントにref
を設定しておけば、親コンポーネントから子コンポーネントのメソッドやデータにアクセスできます。
詳細な流れ
- 子コンポーネント側に
ref
を設定- 子コンポーネントで
ref
を設定することで、親コンポーネントからその子コンポーネントを参照できるようになります。
- 子コンポーネントで
- 親コンポーネントで子コンポーネントを参照
- 親コンポーネントから
this.$refs
を使って、子コンポーネントのインスタンスにアクセスできます。 - これにより、子コンポーネントのメソッドやデータにアクセスできます。
- 親コンポーネントから
具体例
1) 子コンポーネント (ChildComponent.vue
)
<template>
<div>
<p>{{ message }}</p>
<button @click="changeMessage">Change Message</button>
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello from child!'
}
},
methods: {
changeMessage() {
this.message = 'Message changed by parent!';
}
}
}
</script>
2) 親コンポーネント (ParentComponent.vue
)
<template>
<div>
<ChildComponent ref="childComp" />
<button @click="accessChild">Change Child Message</button>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
methods: {
accessChild() {
// 子コンポーネントのメソッドとデータにアクセス
console.log(this.$refs.childComp.message); // 'Hello from child!'
this.$refs.childComp.changeMessage(); // 子コンポーネントのメソッド呼び出し
console.log(this.$refs.childComp.message); // 'Message changed by parent!'
}
}
}
</script>
ポイント
- 親コンポーネントの
this.$refs.childComp
で、子コンポーネントのインスタンスにアクセスできます。 this.$refs.childComp.message
で、子コンポーネントのdata
(ここではmessage
)にアクセスできます。this.$refs.childComp.changeMessage()
で、子コンポーネントのmethods
(ここではchangeMessage
)を呼び出すことができます。
注意点
$refs
は親コンポーネントがマウントされた後でアクセス可能です。つまり、親コンポーネントがレンダリングされる前にアクセスしようとするとundefined
になることがあります。$refs
でアクセスできるのは、子コンポーネントのインスタンスやDOM要素ですが、一般的に子コンポーネントのインスタンスが返されます。