讲干货,不啰嗦,大家在做vue开发过程中经常遇到父组件需要调用子组件方法或者子组件需要调用父组件的方法的情况,现做一下总结,希望对大家有所帮助。

父组件调用子组件方法:

1.设置子组件的ref,父组件通过this.$refs.xxx.method_name(data)调用子组件方法,data参数可选

父组件:

<template>
<div>
  <h1>我是父组件</h1>
<child ref="childname"></child>
</div>
</template>
<script>
import child from '~/components/child';
export default {
components: {
child
},
methods: {
fatherMethod(data)
this.$refs.childname.childMethod(data);
console.log('调用子组件方法');
}
}
};
</script>

子组件:

<template>
<div>
<h1>我是子组件</h1>
</div>
</template>
<script>
export default {
methods: {
childMethod(data) {
  console.log(‘我是子组件方法’)
}
}
};
</script>

子组件调用父组件方法:

1.在子组件中通过this.$parent.event来调用父组件的方法,data参数可选

父组件:

<template>
<div>
<h1>我是父组件</h1>
<child></child>
</div>
</template>
<script>
import child from '~/components/child';
export default {
components: {
child
},
methods: {
fatherMethod(data) {
console.log('我是父组件方法');
}
}
};
</script>

子组件:

<template>
<div>
<h1>我是子组件</h1>
<button @click="childMethod(data)">点击</button>
</div>
</template>
<script>
export default {
methods: {
childMethod() {
this.$parent.fatherMethod(data);
console.log('调用父组件方法')
}
}
};
</script>

2.在子组件里用$emit向父组件触发一个事件,父组件监听这个事件,data参数可选

父组件:

<template>
<div>
<h1>我是父组件</h1>
<child @fatherMethod="fatherMethod"></child>
</div>
</template>
<script>
import child from '~/components/child';
export default {
components: {
child
},
methods: {
fatherMethod(data) {
console.log('我是父组件方法');
}
}
};
</script>

子组件:

<template>
<div>
<h1>我是子组件</h1>
<button @click="childMethod(data)">点击</button>
</div>
</template>
<script>
export default {
methods: {
childMethod(data) {
this.$emit('fatherMethod',data);
console.log('调用父组件方法')
}
}
};
</script>

3.父组件通过props把方法传入子组件中,在子组件里直接调用这个方法,data参数可选

父组件:

<template>
<div>
<h1>我是父组件</h1>
<child :fatherMethod="fatherMethod"></child>
</div>
</template>
<script>
import child from '~/components/child';
export default {
components: {
child
},
methods: {
fatherMethod(data) {
console.log('我是父组件方法');
}
}
};
</script>

子组件:

<template>
<div>
<h1>我是子组件</h1>
<button @click="childMethod(data)">点击</button>
</div>
</template>
<script>
export default {
props: {
fatherMethod: {
type: Function,
default: null
}
},
methods: {
childMethod(data) {
if (this.fatherMethod) {
this.fatherMethod(data);
      console.log('调用父组件传递的方法')
}
}
}
};
</script>

其他调用方法:

1.因为最终所有组件都会渲染成真实的Dom元素,所以可以通过js或jquery,获取Dom元素对象,通过模拟点击的方式触发元素绑定的方法,通过本地Cookie、localStorage或sessionStorage做参数缓存,实现值传递。此方法不限于子父组件,只要组件位于同一页面都可使用,但因为不符合vue规范,并非特殊情况不建议使用

组件A:

<template>
<div>
<h1>我是组件A</h1>
<button id='btn' @click='methodA()'>点我</button>
</div>
</template>
<script>
export default {
methods: {
methodA() {
     var parameter= localStorage.getItem('parameter'); 
console.log('我是组件A方法');
}
}
};
</script>

组件B:

<template>
<div>
<h1>我是组件B</h1>
<button @click='methodB(data)'>点我</button>
</div>
</template>
<script>
export default {
methods: {
methodB(data) {
     localStorage.setItem('parameter',data);
 $('#btn').click();//模拟按钮点击
 console.log('模拟点击按钮,触发A组件方法');
}
}
};
</script>

能力有限,水平一般,错误之处,欢迎指正,感谢关注和评论!

Vue子父组件方法互调的更多相关文章

  1. vue子父组件通信

    之前在用vue写子父组件通信的时候,老是遇到问题!!! 子组件传值给父组件: 子组件:通过emit方法给父组件传值,这里的upparent是父组件要定义的方法 模板: <div v-on:cli ...

  2. vue子父组件的通信

    Element使用的是Vue2.0版本,众所周知在Vue 1.0升级到2.0中去除了$broadcast和$dispatch方法. 1.父组件向子组件传值 a.app.vue父组件 <templ ...

  3. vue子父组件传值

    https://blog.csdn.net/weixin_38888773/article/details/81902789 https://blog.csdn.net/jsxiaoshu/artic ...

  4. Vue子->父组件传值

    父组件引入: Import Test from'' 父页面使用: <Test ref="test" @m1="m2"><Test/> 子 ...

  5. vue --子父组件传值

    1.父组件可以使用 props 把数据传给子组件. 2.子组件可以使用 $emit 触发父组件的自定义事件. vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( e ...

  6. vue 子父组件之间的通信,及在调用组件的地方

    这里是用了 element ui 你们也可以看一下管方的文档 http://element.eleme.io/#/zh-CN/component/installation 组件html <div ...

  7. Vue把父组件的方法传递给子组件调用(评论列表例子)

    Vue把父组件的方法传递给子组件调用(评论列表例子) 效果展示: 相关Html: <!DOCTYPE html> <html lang="en"> < ...

  8. VUE中的子父组件、兄弟组件之间相互传值,相互调用彼此的方法

    vue--组件传值 父组件传值给子组件--"props" 一.父组件--示例 <template> <child :choose-data="choos ...

  9. vue子组件获取父组件方法

    注:以下代码未使用esLint语法检查 父组件: <template> <div class="wrapper"> <cp_action @paren ...

随机推荐

  1. iReport报表生成html,pdf,xls,word工具类

    package com.report; import java.io.ByteArrayOutputStream;import java.io.File;import java.io.InputStr ...

  2. SAP R3和SAP Business One的区别

    SAP R3是SAP开发的 开发语言是ABAP. 之前叫SAP R/2 然后叫R/3 后又改叫ECC 现在叫A1了. 现在有新的版本S4 HANA : SAP发展史 SAP Business One是 ...

  3. 直接用的tar压缩

    将目录里的doc文件夹压缩成tar.gz tar -czf  doc.tar.gz   doc 解压tar.gz tar -xzvf doc.tar.gz 在不解压的情况下查看压缩包的内容: tar ...

  4. nginx利用fastcgi_cache模块缓存

    nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache.proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和 ...

  5. Soda Machine【差分+离散化】

    题目链接:https://ac.nowcoder.com/acm/contest/1106/A 题目大意: 1.一条长1e9的线段,每个节点都可以上色.给出n次操作,每次操作将[l, r]区间内的节点 ...

  6. poj1584(判断凸包+求点到线段的距离)

    题目链接:https://vjudge.net/problem/POJ-1584 题意:首先要判断凸包,然后判断圆是否在多边形中. 思路: 判断凸包利用叉积,判断圆在多边形首先要判断圆心是否在多边形中 ...

  7. C#中使用HttpClient来Post数据的内容HttpContent的各种格式

    平时使用各种网络传输的时候基本上是以Json格式进行的, 所以对其他几种格式也是一知半解, 今天静下心对其好好梳理一番. 首先我借鉴了一篇文章(https://segmentfault.com/a/1 ...

  8. windows使用sqlpus连接oracle 数据库

    1.先安装好Instant Client程序. 2.打开cmd 执行sqlplus命令,如果出现如下图 2.说明需要把oracle install 的bin目类 添加系统环境path中,如下图添加环境 ...

  9. Elasticsearch集群搭建笔记(elasticsearch-6.3.0)

    # 检查Java版本 java -version # 安装Elasticsearch,所有节点均安装并解压 wget https://artifacts.elastic.co/downloads/el ...

  10. 《Mysql 一条 SQL 语句是如何执行的?》

    一:概述 - 首先需要认识一下 Mysql 整体的基础架构 -  二:Mysql 的分层 - MySQL 可以分为 Server 层和存储引擎层两部分 - Server 层 - Server 层包括连 ...