vue 父组件调用子组件的函数_vue子组件触发父组件方法

vue 父组件调用子组件的函数_vue子组件触发父组件方法1、使用场景项目里将element-ui的el-upload写成公共组件方便调用,官方的before-upload方法用于处理上传前要做的事,如:比较文件大小,限制文件类型等,通过返回true或false控制是否上传。当该组件调用父组件方法,并且要能获取到父组件方法的返回值,如何实现?2、问题说明通常子组件调用父组件方法:this.$emit(方法名,传参1,传参2),但是此方法…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、使用场景

项目里将element-ui的el-upload写成公共组件方便调用,官方的before-upload方法用于处理上传前要做的事,如:比较文件大小,限制文件类型等,通过返回true 或 false 控制是否上传。 当该组件调用父组件方法,并且要能获取到父组件方法的返回值,如何实现?

2、问题说明

通常子组件调用父组件方法:this.$emit(方法名, 传参1, 传参2),但是此方法的返回值是vue对象,而不是父组件方法的return值。此时要用到高阶函数,传函数作为参数,父组件里执行该函数。

// ===============方案1=====================
// 父组件
<template>
    <uploader :imgUrl="editForm.guidepic" action="/uploadimg" @uploadSuccess="uploadSuccess" @beforeUpload="beforeAvatarUpload"></uploader>
</template>
<script>
    export default {
        methods: {
             beforeAvatarUpload(file, callback) {
                let size = file.size / 1024 // kb单位
                let res = true
                if (size > 10) {
                    this.$message.error('图片大小超过限制,最大1M')
                    res = false
                    callback(res) // 执行作为参数的函数,注意:callback(true)写法,eslint会报错,true或 false 要赋值给变量res
                }
            }
        }
    }
</script>
 
// 子组件
export default {
    methods: {
        onBeforeUpload(file) {
            let res = true
            this.$emit('beforeUpload', file, val => { res = val }) // 传函数val => { res = val }给父组件
            return res
        }
    }
}

另一种实现方法:通过传Function,子组件可获取到父组件的方法。

// ============方案2=================
// 父组件
<template>
    <uploader :imgUrl="editForm.guidepic" action="/uploadimg" @uploadSuccess="uploadSuccess" :beforeUpload="beforeAvatarUpload"></uploader>
</template>
<script>
    export default {
        methods: {
             beforeAvatarUpload(file) {
                let size = file.size / 1024 // kb单位
                if (size > 1024) {
                    this.$message.error('图片大小超过限制,最大1M')
                    return false
                }
            }
        }
    }
</script>
// 子组件
export default {
    props: {
        // 子组件接收函数
        beforeUpload: {
            type: Function
        }
    },
    methods: {
        onBeforeUpload(file) {
            // 父组件不传,this.beforeUpload默认值undefined
            if (this.beforeUpload) {
                return this.beforeUpload(file)
            }
        }
    }
}

这2这种方案都可以实现,可见props的type为Function是有现实的使用场景的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188137.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 我所喜欢的Drupal教程及资源

    我所喜欢的Drupal教程及资源本文转载于http://www.sayblog.me/the-drupal-tutorials-and-resourcesthat-i-like.html  Drupal是一个免费开源的内容管理系统(CMS),就跟Wordpress一样,不过要比Wordpress更具威力,也更复杂一些。Wordpress已经做得相当好了,甚至可以说已经很完美了,而且简单易用,所以它的用户比Dru

    2022年6月14日
    24
  • JMETER安装与配置教程

    JMETER安装与配置教程1.前言ApacheJMeter是一款纯java编写负载功能测试和性能测试开源工具软件。2.方案理由1、不依赖界面,服务正常启动,传递参数明确便可添加测试用例执行测试。2、测试脚本不用编程,熟悉http请求和业务流程,就可以编写测试用例。3、测试脚本维护方便,可将测试脚本复制,并且可以将某一部分单独保存。4、可以跳过页面限制,向后台程序添加非法数据,测试后台程序的健壮性。5、Jme…

    2022年5月30日
    58
  • cordova declare styleable 错误「建议收藏」

    cordova declare styleable 错误「建议收藏」出现ERROR:InFontFamilyFont,unabletofindattribute可以使用cordovapluginaddcordova-plugin-file-opener2cordova-android-support-gradle-release命令安装支持现在版本的插件解决问题

    2022年7月13日
    20
  • 易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)[通俗易懂]

    易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)[通俗易懂]到循环尾()和跳出循环()是易语言对循环的两种控制方式,教程分别了举例师范讲解。一、官方源码到循环尾调用格式:〈无返回值〉到循环尾()-系统核心支持库->流程控制英文名称:continue本命令转移当前程序执行位置到当前所处循环体的循环尾语句处。本命令为初级命令。操作系统需求:Windows、Linux、Unix跳出循环调用格式:〈无返回值〉跳出循环()-系统核心支持库…

    2022年7月13日
    13
  • C++/C与Java的区别

    C++/C与Java的区别Java是由C++发展而来的,保留了C++的大部分内容,其编程方式类似于C++。但Java的句法更清晰、规模更小、更易学。Sun公司曾对多种程序设计语言进行分析研究,取其精华去其糟粕,最终推出了Java。Java从根本上解决了C++的固有缺陷,形成了新一代面向对象的程序设计语言(当然了解决问题也是需要代价的)。一、跨平台(C\C++和Java)Java是基于JVM虚拟机的跨…

    2022年7月7日
    24
  • 流量矿场[通俗易懂]

    第二个流量魔盒,流量矿场,扫码注册,实名秒通过不刷脸,现在活动:实名通过秒送1台魔盒机,25天产13个币,现在币开盘价格0.11美元,估计后期会涨,不要错过第二个流量魔盒。速度撸起来。线下已经5块回收了!注册链接:http://sina.lt/fyFz苹果APP下载地址:https://9dun.cn/s/zjmalls 安卓APP下载地址:https://9dun.cn/s/zjmallss…

    2022年4月18日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号