在 Vue.js 中, $parent 和 $children 用于实现父子组件直接通信。
$parent:
用于访问父组件实例。
使用方式:this.$parent
$children:
用于访问子组件数组。
使用方式:this.$children
示例:
父组件:
js
data() {
return {
msg: 'Hello'
}
}
模板:
html
<child />
子组件:
js
template: `<div>{{$parent.msg}}</div>`
渲染结果:
Hello
子组件直接访问了父组件的 msg 数据。
反之,父组件也可以直接访问子组件:
父组件模板:
html
<child ref="c1"></child>
方法:
js
this.$children[0].someMethod() // 访问第一个子组件
this.$refs.c1.someMethod() // 访问ref为c1的子组件
所以,$parent 和 $children 主要用于:
- 父子组件直接访问对方的数据或方法。
- 调试时检查组件树的结构。
但是,不推荐在组件间过度使用它们,因为:
- 过高的耦合度,不利于未来的可维护性和可扩展性。
- $parent 和 $refs 无法在 render 函数和 JSX 中使用。
- 应该优先通过 props 和 $emit 实现父子通信,尽量避免直接访问实例。