31. 父子组件的访问方式: $parent-$root

说了 父组件直接访问子组件,现在讲 子组件访问父组件:

有这么个代码:

<body>
    <template id="cpn">
            <div style="border: solid red 2px ">
                    <h2>这里是 cpn</h2>
                    <v-ccpn></v-ccpn>
            </div>
    </template>

    <template id="ccpn">
        <div style="border: solid blue 1px ">
            <h2>这里是 ccpn</h2>
        </div>
    </template>

    <div id="app">
        <v-cpn></v-cpn>
    </div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            app_s1:"却看见更黑暗的家伙(app_s1)"
        },
        methods:{

        },
        components:{
            'v-cpn':{
                template:"#cpn",
                data(){
                    return{cpn_s1:"负重一万斤长大(cpn_s1)"}
                },
                components:{
                    'v-ccpn':{
                        template: "#ccpn",
                        data() {
                            return{ccpn_s1:"我想在那里最蓝的大海杨帆(ccpn_s1)"}
                        }
                    }
                }
            }

        }
    })
</script>
View Code

界面:

 解析: VUE 实例 app 是跟组件  =》 cpn子组件 =》  ccpn 组件

换句话:  爷组件=》 父组件 =》 子组件

那么 如果子组件要访问 父组件的数据 我们也不用事件传递,直接用:$parent

使用例子:

<body>
    <template id="cpn">
            <div style="border: solid red 2px ">
                    <h2>这里是 cpn</h2>
                    <v-ccpn></v-ccpn>
            </div>
    </template>

    <template id="ccpn">
        <div style="border: solid blue 1px ">
            <h2>这里是 ccpn</h2>
            <button @click="parent_data_s1">点击直接显示父组件cpn的data中的 s1</button>
        </div>
    </template>

    <div id="app">
        <v-cpn></v-cpn>
    </div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            app_s1:"却看见更黑暗的家伙(app_s1)"
        },
        components:{
            'v-cpn':{
                template:"#cpn",
                data(){
                    return{cpn_s1:"负重一万斤长大(cpn_s1)"}
                },
                components:{
                    'v-ccpn':{
                        template: "#ccpn",
                        data() {
                            return{ccpn_s1:"我想在那里最蓝的大海杨帆(ccpn_s1)"}
                        },
                        methods:{
                            parent_data_s1(){                       //主要看这个函数  贼方便哈!
                                alert(this.$parent.cpn_s1);
                            }
                        }
                    }
                }
            }

        }
    })
</script>
View Code

别怕 你看图就看懂了他的嵌套 然后慢慢思维跟进然后分析即可。

可以看到很方便 直接即可访问自己的父组件。

但是还是有弊端的 :

尽管在Vue开发中,我们允许通过$parent 来访问父组件,但是在真实开发中尽量不要 这样做。子组件应该尽量避免直接访问父组件的数据, 因为这样耦合度太高了。因为我们说 组件都独立的。

因为:我们将子组件放在另外一个组件之内, 很可能该父组件没有对应的属性,往往会引 起问题。

注意:

1. $parent 没有下标形式,因为总不可能你有几个爸爸吧 ,为什么$children可以? 因为 你可以有多个孩子。

2.可以看到这里的button 直接访问 ccpn 的方法,是怎么做到的,因为button定义在 ccpn中,这些是细节,也是基础吧.

还有一个讲完即可:

this.$root 他是直接访问根组件 比如上面写的 那么他就直接访问 vue实例了。

使用例:

<body>
    <template id="cpn">
            <div style="border: solid red 2px ">
                    <h2>这里是 cpn</h2>
                    <v-ccpn></v-ccpn>
            </div>
    </template>

    <template id="ccpn">
        <div style="border: solid blue 1px ">
            <h2>这里是 ccpn</h2>
            <button @click="root_data_s1">点击直接显示根组件vue实例的data中的 s1</button>
        </div>
    </template>

    <div id="app">
        <v-cpn></v-cpn>
    </div>

<script src="js/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            app_s1:"却看见更黑暗的家伙(app_s1)"
        },
        components:{
            'v-cpn':{
                template:"#cpn",
                data(){
                    return{cpn_s1:"负重一万斤长大(cpn_s1)"}
                },
                components:{
                    'v-ccpn':{
                        template: "#ccpn",
                        data() {
                            return{ccpn_s1:"我想在那里最蓝的大海杨帆(ccpn_s1)"}
                        },
                        methods:{
                            root_data_s1(){                       //主要看这个函数  贼方便哈!
                                alert(this.$root.app_s1);
                            }
                        }
                    }
                }
            }

        }
    })
</script>
View Code

$root 在哪里可以被访问,因为他是根组件  啊哈哈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值