Vue 组件&组件之间的通信 之 子组件向父组件传值

子组件向父组件传值:子组件通过$.emit()方法以事件形式向父组件发送消息传值;

使用步骤:

定义组件:现有自定义组件com-a、com-b,com-a是com-b的父组件;

准备获取数据:父组件com-a要获取子组件data中的height属性;

在子组件com-b中,需要用$.emit()方法将数据以事件的形式发送,$.emit(‘sendData‘, data, data…),红色的部分事件名可自定义,数据可传递多个;

在父组件中使用子组件的地方 <com-b @自定义事件名=‘getData‘></com-b> 监听子组件自定义的事件,并且在方法中获取数据;

在父组件data定义height属性; 在父组件中实现getData(height)方法,方法参数是子组件传递的数据,例如这里直有一个height,然后为this.height赋值; 赋值完毕后就可以使用了;

初始时在子组件中定义width和height

通过一个button来进行实现子组件向父组件进行传值

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>子组件向父组件传值</title>
    <script type="text/javascript" src="../js/vue.js" ></script>
    </head>
    <body>
        <div>
            <father-component ></father-component>
            </div>
    </body>
    <template id="father-template">
        <div>
        <h2> 父组件</h2>
        myData:<span>{{name}},
            {{id}},
            {{user.username}},{{age}}
        </span><br />
            childData:<span> width:{{width}}</span><br /><span>height:{{height}}</span>

        <hr />
      <child-component  :id=‘id‘ :age=‘age‘ @sent-event=‘getData‘></child-component>
        </div>
    </template>
    <template id="child-template">
        <div>
            <p> 子组件</p>
            fatherData:<span >{{name}},{{id}},{{user.username}},{{age}}</span><br />
            myData:<span> width:{{width}}</span><br /><span>height:{{height}}</span><br />
            <button @click="setData">向父组件传送数据</button>

        </div>
</template>
    <script>

        new Vue({

            data:{

        },

            components:{
                    "father-component":{

                        methods:{

            getData(width,height){
                this.width=width;
                this.height=height;
            }
        },
                        data(){
                            return{
                                    id:"01",
                                name:‘perfect‘,

                                user:{

                                    username:‘博客园---perfect*‘,
                                    password:‘123123‘

                                },
                                age:18,
                                width:0,
                                height:0
                            }
                        },

                        template:‘#father-template‘,

                        components:{
                            "child-component":{

                                methods:{
                                    setData(){
                                        console.log(this);//这里的this指的是child-component实例
                                        this.$emit(‘sent-event‘,this.width,this.height);
                                    }
                                },
                                data(){

                                    return{
                                        width:100,
                                height:50
                                    }
                                },

                                template:‘#child-template‘,

                            props:{

                                name:{
                                    type:String,
                                    //required:true,//必须进行传值

                                    default:‘perfect*‘//定义一个默认值
                                },
                                id:[Number,String],
                                   user:{
                                       type:Object,
                                       default:function(){
                                           return {username:‘perfect***‘,password:‘123123‘}
                                       }
                                   },

                                   age:{
                                       type:Number,
                                   validator: function (value) {
                                       return value>=0;
                                   }

                                   }
                            }
                            }
                        },

                    }
                }

        }).$mount(‘div‘);
    </script>
</html>

原文地址:https://www.cnblogs.com/jiguiyan/p/10778273.html

时间: 2024-10-07 05:31:32

Vue 组件&组件之间的通信 之 子组件向父组件传值的相关文章

组件之间的通信(子组件-改变父组件的值)

在vue中,组件之间的通信,是不建议子组件改变父组件的值,因为一个父组件有可能会有很多子组件,改来改去会很难管理(别人都这样说,我信) 试试: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src='../vue.js'> </script> </head> <bod

子页面向父页面传值

SHOWMODALDIALOG/SHOWMODELESSDIALOG --------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT=&

vue组件样式添加scoped属性之后,无法被父组件修改。或者无法在本组件修改element UI样式

在vue开发中,需要使用scoped属性避免样式的全局干扰,但是这样在父组件中是无法被修改的,不仅如此如果项目中用了UI框架比如element Ui,这个时候在本组件也无法修改样式,因为权重问题.但是想要修改还是有方法的: 1. 在不去掉scoped的情况下,在全局样式中覆盖,这种解法,有弊端,可能会污染全局样式. 2. 如果项目用到了预处理器,可以通过vue-loader提供的新写法 vue-loader 写法如下: <style scoped> .a >>> .b { /

JS 子窗口向父窗口传值

首先我们来了解下window对象的的方法open: 1,open() 方法用于打开一个新的浏览 window.open(URL,name,features,replace) 重要事项:请不要混淆方法 Window.open() 与方法 Document.open(),这两者的功能完全不同.为了使您的代码清楚明白,请使用 Window.open(),而不要使用 open(). 2,opener opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用.---这句话怎么

vue组件父子之间相互通信案例

react父子组件通讯-----&gt;下面用到的ref属性调用子组件的方法,可以实现子组件往父组件传递参数,可以通过在父组件的方法中调用子组件的方法,通过返回值来拿到值,也可以在子组件中,对数据处理完后,调用父组件传给子组件的参数或者方法,来实现传参,

<scripttype="text/babel"> var Child =React.createClass({ getInitialState: function() { return {color:"",childMsg:"我是子组件的信息"}; }, changeColor: function(e) { this.setState({color:e.target.getAttribute("data-color&quo

.Net子窗体给父窗体传值的几种方法

其实方法有很多种,这里只介绍3种,大家如有更好的方法可互相学习学习. 1.子父窗体Owner设定法: Form1: void Button_fm1_Click(object sender, EventArgs e) { Form2 fm2 = new Form2(); fm2.Owner = this;   //将Form2的Owner指针指向Form1 fm2.ShowDialog(); } Form2: void Button_fm2_Click(object sender, EventAr

使用window的open方法实现子页面向父页面传值。

有时候我们会需要弹出一个子页面进行级联选择数据,并把选择好的数据填充到父页面. 此时一种简单的方法就是通过window.open()打开一个子页面,子页面提交的时候触发事件,在事件里将子页面填写的数据填充到父页面的方法是: window.opener.document.getElementById("父页面元素的id").value = '子页面填写的值';这个赋值方法仅适用于通过window.open()方法打开的父子页面.切勿使用于其他框架. 原文地址:https://www.cn

vue组件之间的通信以及如何在父组件中调用子组件的方法和属性

在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> <child v-bind:my-message="parentMsg"></child>//注意传递参数时要用-代替驼峰命名,HTML不区分大小写 </div> 子组件: Vue.component('child', { // camelCase in Ja