Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun

简介: Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun


如需了解老子怎么控制儿子的,传送门:https://s-z-q.blog.csdn.net/article/details/119922715

子组件child.vue

<template>
  <ul>
    <li> <button @click="$emit('emit', '方式1:传参给父组件第1个参数', '方式1:传参给父组件第2个参数', '...' )" > 方式1:用$emit传参给父组件(推荐此方式) </button> </li> <br /> 
    <li> <button @click="emit('方式2:传参给父组件第1个参数', '方式2:传参给父组件第2个参数', '...' )" > 方式2:用props属性传进来的函数(方法Function)传递值给父组件 </button> </li> <br /> 
    <li> <button @click="$parent.emit('方式3:传参给父组件第1个参数', '方式3:传参给父组件第2个参数', '...' )" > 方式3:用$parent.functionName调用父组件的方法(不推荐,需要依赖父组件初始化完毕该方法) </button> </li> <br /> 
    <li> <button @click="inject_emit('方式4:传参给父组件第1个参数', '方式4:传参给父组件第2个参数', '...' )" > 方式4:用inject关联父组件provide的方法(这种方式比较生僻,子孙组件都可以直接调用,适用于层级较深的组件关系) </button> </li> <br /> 
    <li> <button @click="window_emit('方式5:传参给父组件第1个参数', '方式5:传参给父组件第2个参数', '...' )" > 方式5:用window的全局方法(此方式属于直男模式,呵呵~) </button> </li> <br /> 
  </ul>
</template> 
<script>
export default {
  inject: ["inject_emit"], //注入方法(子孙组件均可直接调用)
  props: ["emit"], //传入方法
  methods: {
      window_emit(v1,v2,v3){
            window.emit(v1,v2,v3)
      }
  }
};
</script>

父组件father.vue

<template>
  <div>
    <child @emit="emit" :emit="emit"></child>
  </div>
</template>
<script>
import child from "./child.vue";
export default {
  components: {
    child,
  },
  created() {
    window.emit = this.emit;//声明全局方法(直男模式)
  },
  provide() {    
    return {
      inject_emit: this.emit,//在这里对外提供方法,在子孙组件中都可以调用
    };
  },
  methods: {
    emit(v1, v2, v3) {
      alert(`${v1}\n${v2}\n${v3}`); //弹出子组件的传参
    },
  },
};
</script>


相关文章
|
9月前
|
JavaScript
VUE上传功能本地上传正常,打包上传后报错TypeError: ***.upload.addEventListener is not a function
VUE上传功能本地上传正常,打包上传后报错TypeError: ***.upload.addEventListener is not a function
298 0
|
10月前
|
JavaScript
vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案
今天和大家分享一个报错的解决方案 背景 项目打包部署到宝塔上后,打开网页,上传东西时出现了一个报错,但是在本地开发环境是没有问题的。
vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案
|
17小时前
|
JavaScript 前端开发
[Vue Router warn]: Component “default“ in record with path “/xx“ is a function that does not return
[Vue Router warn]: Component “default“ in record with path “/xx“ is a function that does not return
229 0
|
17小时前
|
JavaScript 数据安全/隐私保护 开发者
解决vue引发的报错-sub is not a function at vuex.esm.js:422:1跳转不了路由的问题
解决vue引发的报错-sub is not a function at vuex.esm.js:422:1跳转不了路由的问题
61 0
|
9月前
|
JavaScript 前端开发
Vue项目部署到服务器时上传报错“Uncaught (in promise) TypeError: s.upload.addEventListener is not a function”
使用vue-admin-element框架进行在本地文件上传以及富文本框中的文件上传是没有问题的,但是在上传部署vue项目到服务器上时,就会报如下图中一个错误。
653 0
|
10月前
|
JavaScript
vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案
vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案
229 0
|
11月前
|
人工智能 JavaScript
vue父组件调用子组件this.$refs报错,undefined、not a function问题解决方法
vue父组件调用子组件this.$refs报错,undefined、not a function问题解决方法
|
12月前
常用函数式接口:Consumer、Predicate、Function的方法说明解练习
常用函数式接口:Consumer、Predicate、Function的方法说明解练习
69 0
|
JavaScript
[Vue warn]: Error in mounted hook: “TypeError: handler.call is not a function“
[Vue warn]: Error in mounted hook: “TypeError: handler.call is not a function“
213 0
[Vue warn]: Error in mounted hook: “TypeError: handler.call is not a function“
|
17小时前
|
JavaScript 前端开发
在JavaScript中,函数原型(Function Prototype)是一个特殊的对象
【5月更文挑战第11天】JavaScript中的函数原型是一个特殊对象,它为所有函数实例提供共享的方法和属性。每个函数在创建时都有一个`prototype`属性,指向原型对象。利用原型,我们可以向所有实例添加方法和属性,实现继承。例如,我们定义一个`Person`函数,向其原型添加`greet`方法,然后创建实例`john`和`jane`,它们都能调用这个方法。尽管可以直接在原型上添加方法,但推荐在构造函数内部定义以封装数据和逻辑。
10 2

热门文章

最新文章