zoukankan      html  css  js  c++  java
  • 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 在哪里可以被访问,因为他是根组件  啊哈哈。

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15056373.html

  • 相关阅读:
    POJ-1318(list.sort()输出不为字典序,map才是按字典序排列)
    C++ 进阶
    命令模式在MVC框架中的应用
    使用NoSQL Manager for MongoDBclient连接mongodb
    第一部分 学习函数式思维
    【剑指offer】复杂链表的复制
    Hadoop-2.4.0分布式安装手冊
    Impala中多列转为一行
    js(jquery)绑定点击事件
    hdu1243 最长公共子序列(LCS)
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15056373.html
Copyright © 2011-2022 走看看