vue 子组件中通过change事件来传值给父组件

177 阅读1分钟

背景

今天,遇到一个小问题,就是自定义上传组件,想在上传完文件后,对文件内容进行校验,需要调用后台接口,一时间有点懵圈,因为这是一个通用的组件,不应该为了一个需求而更改自己的组件逻辑。

知识点

其实,在vue中组件间通信也是有函数库的。可以了解一下emit函数。

实现逻辑

首先,子组件中使用emit函数来向父组件中传递参数; 然后,在父组件中设置响应的函数来接收子组件的传参即可实现;

实现步骤

子组件中创建emit函数调用传参

代码如下:

<template>
  <div>
    <a-upload-dragger
      @change="handleChange"
    >
    </a-upload-dragger>
  </div>
</template>

// 上传回调
function handleChange(info) {
   emit('change', successImgUrl, vdata.fileList)
}

从上面可以看到有这么一行代码: emit('change',vdata.successImgUrl,info.fileList)

父组件中通过函数来接收参数

  <a-row v-if="vdata.saveObject.projectType == 'BILL'">
              <a-col :span="10">
                <a-form-item name="projectPayersUrl">
                  <JeepayUploadDragger
                    @change="checkExcelInfo"
                  />
                </a-form-item>
              </a-col>
            </a-row>

// 校验excel是否填写正确
function checkExcelInfo(successImgUrl,fileList) {
    vdata.saveObject.projectPayersUrl = successImgUrl
}

上面有一行代码: @change="checkExcelInfo" 可以看到,这里是通过change来绑定了checkExcelInfo函数来接收处理子组件传递过来的参数。此处的change就是我们子组件中的emit绑定的change。两个名字是一致的。

这样就轻松搞定了,子组件向父组件传递函数的操作了。 好了,欢迎大家点击下方卡片,关注《coder练习生》