子父组件通讯

为什么要进行组件通信?

组件是一个聚合体,将来项目要合并,那么必然各个组件之间需要建立联系,这个联系就是数据通信

下面看一下案例:

//自我案例
<body>
    <div id="app">
        <Father></Father>
    </div>
    <template id="father">
        <div>
            <h3 @click="open"> 这里是父组件 </h3>
            <p> 我先在有: {{ xiaojinku }} </p>
            <!-- 这个的@后的事件名称可以任意  @后的就是自定义事件, =后的就是事件处理程序 -->
            <Son @songet = "fatherget"  :c="d"></Son>
        </div>
    </template>

    <template id="son">
        <div>
            <h4> 这里是Son 组件</h4>
            <button @click = "give"> 给红包 </button>
        </div>
    </template>
</body>
<script src="../../lib/vue.js"></script>
<script>
    // 子父组件通信是通过自定义事件实现的  

    Vue.component('Father', {
        data() {
            return {
                xiaojinku: 0,
                b: 777,
                d: false
            }
        },
        template: '#father',
        methods: {
            fatherget(val, num) {
                console.log(val, num)
                this.xiaojinku = val
            },
            open() {
                this.d = true;
            }
        }
    })

    Vue.component('Son', {
        template: '#son',
        props: ["c"],
        // props: {
        //     a: {
        //         type: Number,
        //         default: () => {
        //             return 1
        //         },
        //         require: true
        //     }
        // },
        data() {
            return {
                hongbao: 1000
            }
        },
        methods: {
            give() {
                // this.$emit('get',参数)
                this.$emit('songet', this.hongbao, 12)
            }
        },
        mounted() {
            console.log(this.$props)
            console.log(this.a, this.c)
        }
    })

    var vm = new Vue({
            el: '#app'
                // components:{
                //     son,
                //     father,
                // }
        })
        // console.log(vm)
</script>

是通过自定义事件

事件的发布
通过绑定元素身上实现
事件的订阅

通过this.$emit触发 // html

<Father></Father>
</div>

<div>
  <h3> 这里是son </h3>
  <button @click = "giveHongbao"> 给父亲红包 </button>
</div>
</template> //js Vue.component('Father',{

template: '#father',
data ( ) {
  return {
    gk: 0
  }
},
methods: {
  fn ( val ) {
    this.gk = val 
  }
}
})

Vue.component('Son',{

template: '#son',
data () {
  return {
    money: 5000
  }
},
methods: {
  giveHongbao () {
    this.$emit('give',this.money)
  }
}
}) new Vue({

el: '#app'
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值