初识vue(9)——组件父子直接访问

父访问子

主要使用2个方法$ children、$ refs。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../vue.js"></script>
</head>
<body>
<div id="app">
    <cpn></cpn>
    <cpn></cpn>
    <cpn></cpn>
    <cpn></cpn>
    <cpn ref="SHU"></cpn>
    <cpn></cpn>
    <button @click="getchild">查看子组件</button>
</div>
</body>
<template id="cpn">
    <div>
        <h1>{{name}}</h1>
    </div>
</template>
<script>
    const cpn={
        template:'#cpn',
        data(){
            return{
                name:"Ssshu"
            }
        }
    }
    Vue.component("cpn",cpn);
    const app = new Vue({
        el:'#app',
        data:{
            message:'Shu',
        },
        methods:{
            getchild(){
                console.log(this.$children);
                console.log(this.$children[0].name);
                console.log(this.$refs.SHU.name);
            }
        },
    })
</script>
</html>

这里使用$children可以访问到所有子组件的所有信息,当要具体访问某一个子组件里面的内容的时候,改变 $children数组下标值就行了,就算只用了一个组件,也会默认在 $children里面生成数组,这个时候【0】就是唯一那个数组。而且在 $children里面数组指向组件的顺序就是你在上面html中使用的顺序,自上到下。

这里会发现一个问题: $children固然可以访问到子组件,但是因为采用数组的形式,方法里面下标是固定的,组件的优点在于复用性,如果在复用的时候改变了顺序,或者增加删除了组件,那么方法里面的数组下标也应该手动去改变,这样就麻烦了,不利于维护。

所有这里采用常常是 $refs的方法,只需要在要访问的地方refs绑定一个标记用与访问就行。

子访问父

采用 $parent方法访问父组件
采用 $root方法访问根组件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../vue.js"></script>
</head>
<body>

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

<template id="cpn">
    <div>
        <h2>我是cpn组件</h2>
        <ccpn></ccpn>
    </div>
</template>

<template id="ccpn">
    <div>
        <h2>我是子组件</h2>
        <button @click="btnClick">按钮</button>
    </div>
</template>


<script>
    const app = new Vue({
        el: '#app',
        data: {
            message: '你好啊'
        },
        components: {
            cpn: {
                template: '#cpn',
                data() {
                    return {
                        name: '我是cpn组件的name'
                    }
                },
                components: {
                    ccpn: {
                        template: '#ccpn',
                        methods: {
                            btnClick() {
                                // 1.访问父组件$parent
                                // console.log(this.$parent);
                                // console.log(this.$parent.name);

                                // 2.访问根组件$root
                                console.log(this.$root);
                                console.log(this.$root.message);
                            }
                        }
                    }
                }
            }
        }
    })
</script>

</body>
</html>

这里的 $parent,不是数组形式,主要是因为一个子组件只有一个父组件,但是一个父组件能有多个子组件。所以 $children是数组形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值