vue3父组件方法之间方法的互相调用
场景描述
在项目开发中。我们可能会使用父组件调用子组件中的方法
也有可能子组件中调用父组件中的方法
下面我们来看一看组件之间方法的调用
父组件页面
<template>
<div>
<list-com ref="listRef"></list-com>
<button @click="changeValue" >改变值</button>
</div>
</template>
<script>
import listCom from "@/components/list-com.vue"
import { ref } from '@vue/reactivity'
export default {
components:{
listCom
},
setup () {
let listRef=ref()
function changeValue(){
// 需要注意let listRef=ref() 不能够写在这个函数体内,
// 否者listRef 将会找不到,因为有函数作用域
listRef.value.fatherMess([{name:'杨洋'}])
}
return {changeValue,listRef}
}
}
</script>
子组件页面
<template>
<div>
<h2>我是子组件</h2>
儿子接受到的数据:{{ list.arr}}
</div>
</template>
<script>
import { reactive } from '@vue/reactivity';
export default {
setup () {
let list=reactive({
arr:[]
})
function fatherMess(mess){
console.log('父组件给子组件的值',mess );
list.arr=mess
}
// 虽然页面上没有使用这个函数,
// 但是也要抛出去,否者父组件会报错 fatherMess is not a function
return {fatherMess,list}
}
}
</script>

出现 Uncaught TypeError: listRef.value.fatherMess is not a function 如何解决
出现这样的错误,是因为子组件中的事件 fatherMess函数。
并没有抛出出去哈
解决办法 子组件中 return {fatherMess}

子组件调用父组件中的方法
子组件
<template>
<div>
<h2>我是子组件</h2>
<button @click="getHander" >获取值</button>
</div>
</template>
<script>
import { reactive } from '@vue/reactivity';
export default {
setup (props,{attrs,slots,emit}) {
function getHander(){
// 不能够在使用原来的 this.$partent.xxx()这种方式了
emit('myclick','给父组件的值' )
}
return {getHander}
}
}
</script>
父组件
<template>
<div>
<list-com @myclick="myclick"></list-com>
</div>
</template>
<script>
import listCom from "@/components/list-com.vue"
export default {
components:{
listCom
},
setup () {
function myclick(mess){
console.log(mess);
}
return {myclick}
}
}
</script>

vue3父组件方法之间方法的互相调用的更多相关文章
- Vue3 父组件调用子组件的方法
Vue3 父组件调用子组件的方法 // 父组件 <template> <div> 父页面 <son-com ref="sonRef"/> < ...
- 【Vue项目笔记】—— 父子组件之间传递参数和子组件执行父组件中的方法
父组件(MyBlog.vue) <template> <!-- Delete Modal --> <!-- 注意:这里的@deleteBlog中的deleteBlog要和 ...
- vue 父组件使用keep-alive和infinite-scroll导致在子组件触发父组件的infinite-scroll方法
(vue.js)vue 父组件使用keep-alive和infinite-scroll导致在子组件触发父组件的infinite-scroll方法”问题疑问,本网通过在网上对“ (vue.js)vue ...
- Vue3父组件调用子组件内部的方法
1. 子组件中定义方法并通过defineExpose暴露出去 import { reactive, defineExpose } from "vue"; const state = ...
- 父组件中vuex方法更新state,子组件不能及时更新并渲染的解决方法
场景: 我实际用到的是这样的,我父组件引用子组件related,父组件调用获取页面详情的方法,更新了state值related,子组件根据该related来渲染相关新闻内容,但是页面打开的时候总是先加 ...
- angular4父组件向子组件传值,子组件向父组件传值的方法
父组件向子组件传值 @Input 文件目录 父组件: father.template.html <h1>父组件</h1> <cmt-child [data]='dat ...
- vue3 父组件给子组件传值 provide & inject
介绍 provide() 和 inject() 可以实现嵌套组件之间的数据传递. 这两个函数只能在 setup() 函数中使用. 父级组件中使用 provide() 函数向下传递数据. 子级组件中使用 ...
- VUE中的子父组件、兄弟组件之间相互传值,相互调用彼此的方法
vue--组件传值 父组件传值给子组件--"props" 一.父组件--示例 <template> <child :choose-data="choos ...
- VUe.js 父组件向子组件中传值及方法
父组件向子组件中传值 1. Vue实例可以看做是大的组件,那么在其内部定义的私有组件与这个实例之间就出现了父子组件的对应关系. 2. 父子组件在默认的情况下,子组件是无妨访问到父组件中的数据的,所以 ...
- Angular组件——父组件调用子组件方法
viewChild装饰器. 父组件的模版和控制器里调用子组件的API. 1.创建一个子组件child1里面只有一个greeting方法供父组件调用. import { Component, OnIni ...
随机推荐
- java并发编程(2):Java多线程-java.util.concurrent高级工具
高级多线程控制类 Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可以帮助开发者编写高效.易维护.结构清晰的Java多线程程序. Thr ...
- JQuery 弹出模态窗口
index.html <!DOCTYPE html> <html> <head> <!-- Contact Form CSS files --> < ...
- Educational Codeforces Round 94 (A - D题题解)
https://codeforces.com/contest/1400/problem/A Example input 4 1 1 3 00000 4 1110000 2 101 output 1 0 ...
- 【每日一题】8.Shortest Path (树上DFS)
题目链接:Here 题意总结:给定的是无向图(树),要求把分成 \(n/2\) 对 让权值最小 思路: 看一下范围 在加上是一棵树 所以做法应该是dfs 复杂度为 \(\mathcal{O}(n)\) ...
- 领域驱动设计(DDD)实践之路(三):如何设计聚合
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/oAD25H0UKH4zujxFDRXu9Q作者:wenbo zhang [领域驱动设计实践之路 ...
- nginx导致获取客户端访问ip都是nginx服务器的地址问题解决
java 获取用户ip的方法 /** * 获得客户端 ip * @param request * @return */ public String getRemortIP(HttpServletReq ...
- springBoot项目打jar包
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- git速查
- java基础(16)--super与this
一.this简介 1.this. this() 2.静态方法无法使用 3.不省略的情况:区分局部变量与实例变量,比如set方法中用到 二.super简介 1.只能出现在实例方法或构造方法中 2. ...
- Windows 下 Outlook 点击关闭最小化和开机自动运行
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...