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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

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

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