Vue的emit方法,子组件向父组件传递参数

 Vue的子组件向父组件传递参数,提供了$emit方法

$emit有两个参数,$emit(‘事件名’,传递的参数),两个参数后续说明,上代码;

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>v-model</title>
        <script src="vue.js"></script>
        <link rel="icon" href="01_飞机.png" >
    </head>
    <body>
        <div id='model' :style="{ fontSize: postFontSize + 'em'}">
            <count-time @getcount='changeSize'></count-time>
        </div>

        <script>
            Vue.component('count-time',{
                data: function(){//组件中的data必须是一个函数
                    return {
                        count: 20
                    }
                },
                template: "<button @click='handleClick'>点击扩大</button>",
                methods:{
                    handleClick:function(){
                        this.$emit('getcount',this.count);
                    }
                }
            })

            var model = new Vue({
                el: '#model',
                data:{
                    postFontSize:0
                },
                methods:{
                    changeSize:function(index){//这里的index获取的是count的值
                        this.postFontSize += index
                    }
                }
            })
        </script>
    </body>
</html>

实现了属性fontsize的扩大,这里只是为了说明$emit的用法,不是为了实现功能

 点击button后,button下移动,说明fontsize的扩大了

代码说明

 $emit('getcount',this.count);这里getcount是事件名,而this.count是要传递给父组件的参数。

template模板中的@click点击绑定的是handleClick,点击后就会调用自定义的handleClick函数,$emit('getcount',this.count)就会执行,但是此时count并没有传递给父组件。

然后需要在dom中利用$emit创建的getcount事件,并绑定父组件自定义的changeSize函数,这时count才传递给父组件。

父组件的函数参数index此时接收了子组件的count参数 ,index = count = 20

猜你喜欢

转载自blog.csdn.net/qq_52070860/article/details/120889947