vue 子组件和父组件的关系及子父组件如何传值?
金蝶云社区-honey缘木鱼
honey缘木鱼
17人赞赏了该文章 2,133次浏览 未经作者许可,禁止转载编辑于2018年11月16日 20:23:16
summary-icon摘要由AI智能服务提供

本文介绍了Vue项目中子组件与父组件的基本概念及具体使用方法。通过弹出框的示例,展示了子组件和父组件之间的调用关系和传值过程。总结了父组件如何调用子组件、如何向子组件传值,以及子组件如何回调给父组件值的知识点。文中还介绍了使用`refs`直接访问子组件方法和属性的方法,以及在实际操作中遇到的问题和解决方案。

做过vue项目,肯定听过子组件父组件这些关键字,小编我刚听到时根据自己的理解,就像移动端的子试图,父试图的概念,在使用的过程中,才正真理解子父组件的使用方法。

下面介绍下在项目具体使用方法:

屏幕快照 2018-11-16 下午6.39.18.png

当我们新建一个vue项目时,观察项目结构,看到上图所示 src ---->components ,这个文件夹下就是需要我们自己创建vue子组件。


下面以如下图实现的弹出框效果图来介绍两者之间的调用关系,及传值过程。

屏幕快照 2018-11-16 下午6.52.45.png


实现原理:

弹出框是子组件,点击弹出时,父组件要给子组件传支付金额,点击子组件完成后,子组件要给父组件传支付类型。

总结知识点:

(1).父组件如何调用子组件?

(2).父组件如何向子组件传支付金额?

(3).子组件如何回调给父组件支付类型?

具体实现过程:

先在scr--->components下建立以名为usePayType的子组件,创建后,在

<template>//页面样式
  <div class="self-modal" v-show='showModal' @click="cancelClick" v-bind:style="styleObj">
    <div class="career"  @click.prevent.stop>
      <div class="bgHeader">
        <div>确认付款</div>
        <img class="close" src="../../../static/images/Close@2x.png"  @click="cancelClick">
      </div>
      <div class="price">¥{{sumPrice}}</div>
      <div class="wxPay" @click="selectPay('wx')">
        <div class="bgPay">
          <img class="wxLogo" src="../../../static/images/wx.png">
          <div class="wxType">微信支付</div>
        </div>
        <img class="selectedPay"  v-bind:src="selectPayWx" >
      </div>
      <div class="zfbPay" @click="selectPay('zfb')">
        <div class="bgPay">
          <img class="wxLogo" src="../../../static/images/zfb.png" >
          <div class="wxType">支付宝</div>
        </div>
        <img class="selectedPay"  v-bind:src="selectPayAli" >
      </div>
      <div class="bottom"  @click="sureClick">完成</div>
    </div>
  </div>
</template>

解决问题1.父组件如何引用子组件?


269A1182-3ADD-4587-84A2-5F0B944DF113.png

F2835F02-8FE7-4E2C-9B30-FEC7560696CD.png

屏幕快照 2018-11-16 下午7.27.01.png

先在父组件中引入相应位置的子组件,定义子组件,然后使用子组件。


解决问题2.父组件如何向子组件传支付金额

   先在子组件的pros 定义金额变量,在

5C57D703-78FF-404E-B45D-FC5875B5838F.png

F16E335F-23F2-44F0-94F5-F745D34C2067.png


  父组件使用子组件时,把值传给对应的变量

8B62451C-3447-4206-8FCE-A6A7C1AB18D0.png


实现效果图:

屏幕快照 2018-11-16 下午7.50.40.png

解决问题3.子组件如何回调给父组件支付类型


父组件在使用子组件的中定义一个方法

<usePayType :payPrice = '300' @submitOrder="submitOrder"></usePayType>
submitOrder (data){
 //在此写接受子组件传来的值data
}

子组件使用$emit放发发送给父组件值

//选中支付类型,点击完成
sureClick () {
  this.$emit('submitOrder','wx_pay')//下单
},

submitOrder 就是父组件定义的方法。


OK!问题解决!

但是在做的过程中,发现一个更方便的方法,用refs,可以直接拿到子组件的方法和属性值。

ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上,$refs 是所有注册过的ref的一个集合.

上面的子组件用refs的使用方法如下:

父组件操作:

<usePayType ref="getPayType" @submitOrder="submitOrder"></usePayType>
// 提交订单
gotoPay () {
  this.$refs.getPayType.sumPrice = this.sumMoney
  this.$refs.getPayType.showModal = true
},

打印this.$resf.getPayType可以看到

屏幕快照 2018-11-16 下午8.16.40.png


this.$resf.getPayType就代表是子试图,这里只是调用的data中的变量,也可以点用methods中的方法,当我们想改变父组件传给子组件的值时,因为在子组件mounted中,当初还未拿到传过来的值,就完全可以利用resf调用子组件methods中来实现!


有些地方表述不一定清晰,又不理解的地方,随时评论!


本文独发金蝶云社区!


赞 17