vue-父组件向子组件传值

一、父组件向子组件传值

    其实该问题是说子组件如何访问父组件的属性和方法?那么根据对组件化的理解,无非就是要解决两个问题:

        1、父组件如何将值传给子组件?

        2、子组件如何获取父组件传递过来的值?

    解读vue示例代码:

        1、父组件向子组件传值是通过“属性绑定”的形式实现的(第2行)

        2、子组件默认是无法访问到父组件中的数据和方法的(如果去掉19行,18行是取不到数据的,浏览器还会报错)

    过程分析:

        1、首先,第2行是引用子组件对象模板,通过属性绑定的方式将父组件的msg绑定给自定义的属性名称parentmsg,这一步已经把父 组件的值传给了子组件;

        2、看代码vue中是通过在子组件中定义props属性,并将绑定的属性名传进去就可以获取到父组件传过来的值。

        关键字:属性绑定 、 props

    注意:

        1、子组件data里面的数据是子组件私有的,可读可写。

        2、组建中props种的数据都是通过父组件传递过来的,可读不可写。

 1 <div id='app'>
 2     <com1 :parentmsg='msg'></com1>
 3 </div>
 4 
 5 
 6 var vm = new Vue({
 7     el:'#app',
 8     data:{
 9         msg: '这是父组件中的数据'
10     },
11     methods:{},
12     //定义子组件
13     components:{
14         com1:{
15             data(){
16                 return {title:'子组件',content:'这是子组件内容'}
17             },
18             template:'<h1>这是子组件--{{parentmsg}}</h1>',
19             props:['parentmsg']
20         }
21     }        
22 })

二、父组件向子组件传递方法

    该问题可以理解为“子组件如何调用父组件的方法”,根据对父组件向子组件传值过程的理解,该过程还是分为两个步骤:

        1、父组件如何将方法传给子组件?

        2、子组件如何获取子组件传过来的方法?

    解读vue示例代码:

        1、父组件通过“事件绑定机制”将方法传给子组件。

        2、子组件在methods属性中用this.$emit('func')获取父组件传递的方法。

    过程分析:

        1、首先在定义的vue对象实例中定义一个show方法(第32行),然后我们通过components属性将定义的子组件com2引用一下,在第2行以标签的形式加以引用,在标签里面用事件绑定机制将show绑定给func,此时已成功将父组件的show方法传递给了子组件com2;

        2、我们需要触发并调用父组件传递过来的方法,在子组件com2的methods属性中定义了点击事件方法,点击的时候通过this.$emit('func',this,sonmsg)获取父组件的方法。

    注意:

        1、@func='show' 不是show(),表示将show()的引用直接给func,如果是show()表示将方法的结果给func,注意含义不一样。

        2、this.$emit(),$emit是触发的意思,第一个参数是父组件传递的方法名,从第二个参数开始可以传递额外的参数。

 1  <div id='app'>
 2      <com2 @func='show'></com2>
 3  </div>
 4 
 5 <template id='tem1'>
 6     <div>
 7         <h1>这是子组件</h1>
 8         <input type="button" value="子组件的按钮,点击调用父组件传递过来的func方法" @click='myclick'>
 9     </div>
10 </template> 
11  
12 //定义一个字面量类型的组件模板对象
13 var com2 = {
14     tenplate:'#tem1',
15     data(){
16         return{
17             sonmsg:{name:'son',age:6}
18         }
19     },
20     methods:{
21         myclick(){
22            this.$emit('func’,this.sonmsg);
23         }
24     }
25 }
26 
27  var vm = new Vue({
28      el:'#app',
29      data:{
30          data_form_son: ''
31      },
32      methods:{
33         show(param){
34             console.log("调用父组件的show方法"+JSON.stringify(param));
35             this.data_form_son = JSON.stringify(param);
36         }
37     },
38      components:{
39          com2
40      }        
41  })

 三、子组件通过事件调用向父组件传值。

    看代码22行,子组件调用父组件方法的时候将this.sonmsg传递,然后在33行在show方法里面传参,35行就可以获取值。(日后加以补充)

原文地址:https://www.cnblogs.com/wangyfax/p/12259790.html