Vue组件通信(props,refs)

父子组件的通信(通讯) (组件的通信 是vue核心之一) 组件是vue的核心,组件的通信是vue的核心的核心

通信:数据的“动态的实时的”传递


父传子

父传子:(子组件中)props属性-----父用子的时候 通过 属性 传递

1.先创建根组件和一个局部组件,在根组件中注册局部组件,让局部组件成为根组件的子组件

<body>
    
    <div id="app">

        <one></one>
    </div>
    <template id="one">
        <div>
            <h1>我是子组件one</h1>
        </div>
    </template>

    <script src="./js/vue2.6.14.js"></script>
    <script>
        let one = {
            template:`#one`
        }


        let vm = new Vue({
            el:'#app',
            data:{

            },
            components:{
                one
            }
        })
    </script>
</body>

 2.在根组件的数据中心有三条数据,分别是 字符串,num,数组

 data:{
                mes:'我是父组件中的数据,我要传给子组件',
                num:100,
                list:[1,2,3,4,5]
            }

3.子组件中定义props的属性-----子要申明props['属性名']来接收(接收 父 传递 给 子的 数据)

let one = {
            props:['getmes','number','arr'],
            template:`#one`
        }

            // 另外几种写法
            // props:['getmes'],
            // 另一种写法,告诉别人我的数据类型
            // props:{'getmes':{type:String}},
            // 又是一种写法,简化上一种
            // props:{getmes:String},
       // props:{
            //     getmes:String,
            //     number:Number,
            //     arr:Array
            // },

4.在父组件的视图层使用子组件时,进行绑定数据

<div id="app">

        <one :sendone="mes" :num="i" :list="arr"></one>
    </div>

5.在子组件的视图层使用父级传来的数据:

<template id="one">
        <div>
            <h1>我是子组件one</h1>
            <p>接收到的父组件数据----{{getmes}}</p>
            <p>接收到的数值---{{number}}</p>
            <ul>
                <li v-for="i in arr">{{i}}</li>
            </ul>
        </div>
    </template>


父实例(父组件)

ref 获取 子组件实例 (在模板中,使用组件的时候,在组件上添加的ref属性)

识别:在子组件上或元素上使用属性ref

    ref---为了识别 父组件在获取组件实例时候,能够 识别到 谁 是 谁

ref 和 $refs 父组件 和 子组件 (父子之间 数据访问)

1.创建根组件,和两个子组件

<body>
    <div id="app">

        <one></one>
        <two></two>
    </div>
    <template id="one">
        <div>
            <h1>我是子组件one</h1>
        </div>
    </template>
    <template id="two">
        <div>
            <h1>我是子组件two</h1>
        </div>
    </template>

    <script src="./js/vue2.6.14.js"></script>
    <script>
        let one = {
            template:`#one`
        }
        let two = {
            template:`#two`
        }
        let vm = new Vue({
            el:'#app',
            data:{

            },
            components:{
                one,
                two
            }
        })
    </script>
</body>

2.在子组件中有数据和一个计算属性:

let one = {
            template:`#one`,
            data(){
                return {
                    mes:'我是one的数据'
                }
            }
        }
        let two = {
            template:`#two`,
            data(){
                return {
                    num:10
                }
            },
            computed:{
                setnum(){
                    this.num*100
                }
            }
        }

3.在根组件的视图层通过  ref 给子组件一个名字:

<div id="app">

        <one ref="aaa"></one>
        <two ref="bbb"></two>
    </div>

4.在根组件的生命周期函数中访问子组件的数据:

 mounted(){
                console.log(this.$refs);
                console.log(this.$refs.aaa.mes);
                console.log(this.$refs.bbb.setnum)
            }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值