vue父子组件

2019年8月20日

父组件向子组件传值

props中的数据都是从父组件传递给子组件的
把父组件传递过来的parentmsg属性,先在数组中定义一下,才能使用这个数据

<script>
        var vm=new Vue({
           el:'#app',
           data:{
               msg:'父组件中的数据'
           },
           methods:{},
           components:{
               com1:{
               	   data(){},//注意:子组件中的data数据,并不是通过父组件传递过来的,而是子组件自身私有的,比如:子组件通过Ajax  ,请求回来的数据,都可以放到data身上;
               	   // data 上的数据,都是可读可写的;
                   template:'<h1>这是子组件---{{parentmsg}}</h1>',
                   props:['parentmsg'],  //把父组件传递过来的parentmsg属性,先在数组中定义一下,才能使用这个数据
               }
           }
        });
    </script>

页面中的使用

<div id="app">
        <!--父组件,可以在引用子组件的时候, 通过属性绑定( v-bind: )的形式,把需要传递给子组件的数据,以属性绑定的形式,传递到子组件内部,供子组件使用-->
        <com1 v-bind:parentmsg="msg"></com1>
    </div>

结果在这里插入图片描述

props中的数据都是只读的,无法重新复制,所以 如果需要修改props中的数据,就得修改父组件中的data数据

如果直接修改props ,页面刷新之后数据又会重写 使用的是父组件中的data数据


父组件向子组件传递方法

先创建父组件

var vm=new Vue({
           el:'#app',
           data:{},
           methods:{
               show(){
                   console.log('调用了父组件身上的show方法')
           }
           },
           components:{
               com2
           }
        });

父组件中声明了show方法
再创建子组件

var com2={
            template:'#tmp1',
            methods:{
                myclick(){
                    //emit是触发,调用
                    this.$emit('func')
                }
            }
        }

使用v-on事件绑定机制将show方法绑定到实例

<div id="app"><!--父组件向子组件传递方法使用的是事件绑定机制v-on,当我们自定义了一个事件属性机制之后 子组件就能通过某些方法来调用传递进去的这个方法了-->        
        <com2 @func="show"></com2>
    </div>

v-on的简写是@ 注意:等号右边的方法名不能带括号,如果带括号则是,先执行一次方法,然后将方法返回值赋值给左边的变量

然后在子组件的模板对象中调用show方法

<template id="tmp1">
            <div>
                <h1>这是子组件</h1>
                <input type="button" value="触发" @click="myclick">
            </div>
        </template>

将show方法绑定到mycilck中

var com2={
            template:'#tmp1',
            methods:{
                myclick(){
                    //emit是触发,调用
                    this.$emit('func')
                }
            }
        }

这里的$emit是由Vue提供的,参数是func ,而func则是在实例中绑定了show,
所以间接地 func==show

如果要向父组件传参的话
在这里

myclick(){
                    //emit是触发,调用
                    this.$emit('func',123,456)
                }

父组件接收参数

methods:{
               show(data,data2){
                   console.log('调用了父组件身上的show方法'+data+data2)
           }
           }

子组件向父组件传值的方法

先在父组件上创建接收对象

var vm=new Vue({
           el:'#app',
           data:{
               datamsgFormSon:null
           },
           methods:{
               show(data){
                this.datamsgFormSon=data
           }
           },
           components:{
               com2
           }
        });

this.datamsgFormSon=data

调用组件的时候

<com2 @func="show"></com2> 传递方法

子组件传值

 methods:{
                myclick(){
                    //emit是触发,调用
                    this.$emit('func',123)
                }
            }

这样父组件data中的datamsgFormSon就获得了从子组件中传递过来的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值