有一个组件A,包含了组件B,组件B包含了组件C,那么组件A就是父组件,组件B就是子组件,组件C就是孙组件。
$attrs可以把父组件的值传给孙组件
1.在引用的子组件里绑定要传的值
<template> <div id="app"> <HelloWorld :test="hello"/> </div> </template>
2.在引用的孙组件里用v-bind绑定$attrs
<child v-bind="$attrs"></child>
3.在孙组件里打印出this.$attrs,可以获取到父组件的数据
mounted(){ console.log(this.$attrs.test); this.cdata = this.$attrs.test }
完整例子:
App.vue 父组件
<template> <div id="app"> <HelloWorld :test="hello"/> </div> </template> <script> import HelloWorld from './components/HelloWorld' export default { name: 'App', components: { HelloWorld }, data(){ return { hello:"hello" } }, } </script>
HelloWorld.vue子组件
<template> <div> <child v-bind="$attrs"></child> </div> </template> <script> import Child from '../components/Child' export default { name: "HelloWorld", components:{ Child }, data () { return { }; } } </script>
Child.vue 孙组件
<template> <div> {{cdata}} </div> </template> <script> export default { name: "Child", data () { return { cdata:"孙组件" }; }, mounted(){ console.log(this.$attrs.test); this.cdata = this.$attrs.test } } </script>