大家都知道Vue2中父传子是通过父组件绑定一个属性,子组件再用props进行接收,子传父是通过this.$emit那么Vue3中有什么不同呢?以下为您解答谜团

#Vue3的父传子

一.现在父组件调用子组件的时候,通过动态属性把数据传递过去

二.在子组件通过props进行接收

三.正常使用 / setup里面没有this 所以通过props进行父传子

1.创建两个组件,一个father父组件和一个Child子组件,然后在父组件中通过components注册子组件 并在script标签中导入子组件的地址,然后展示在页面

#父组件内容

<template><div><h2>父组件</h2><!--4. 动态绑定到子组件  切换子组件进行接收--><Child :pName="name" /></div>
</template><script>
//目标:父传子
//导入子组件
import Child from "../components/01-child.vue";
// 导入ref  用于做响应式处理
import { ref } from "vue";
export default {setup() {//2.定义const name = ref("你好");//3.导出   如果想要数据在外部渲染 必须得导出return {name,};},// 1.注册子组件components: {Child,},
};
</script><style>
</style>

#子组件内容

<template><div><h2>子组件</h2><!-- 2.展示到页面 --><p>父组件传递过来的name:{{ pName }}</p><p>父组件传递过来的加工后name:{{ ppName }}</p></div>
</template><script>
export default {// 1.props 接收父组件传递子组件的数据props: ["pName"],setup(props) {// 3.可以进行动态的修改let ppName = props.ppName;ppName = "二货";return {ppName,};},
};
</script><style>
</style>

#Vue3中的子传父:

紧接上一个父传子咱接着写  下面有一个很好玩的东西 context是什么

<template><div><h2>子组件</h2><!-- 2.展示到页面 --><p>父组件传递过来的name:{{ pName }}</p><p>父组件传递过来的加工后name:{{ ppName }}</p></div>
</template><script>
// 目标子传父
export default {// 1.props 接收父组件传递子组件的数据props: ["pName"],// 传入参数setup(props,context) {let ppName = props.ppName;ppName = "二货";//子传父:context是什么?console.log(context);return {ppName,};},
};
</script><style>
</style>

setup中的参数context是什么呢?这是我们开展下一步的关键

经过输出发现里面有attrs(多层组件传值)和emit,其中emit正是我们子传父所需要的

发现context 作用是接收额外的数据

#emit 从context当中得到一个emit方法,用来给父组件触发事件,达到子传父的效果

#attrs 从context当中得到一个属性,可以得到没用props接收的父传子的数据

#slots 从context当中得到了一个属性,可以得到父组件通过slot传递过来的插槽数据

通过解构的方式得到emit等‘

子组件:

<template><div><h2>子组件</h2><!-- 2.展示到页面 --><p>父组件传递过来的name:{{ pName }}</p><p>父组件传递过来的加工后name:{{ ppName }}</p><div><!-- 子传父第二步 搞一个点击事件 --><button @click="toChild">子传父</button></div></div>
</template><script>
// 目标子传父
export default {// 1.props 接收父组件传递子组件的数据props: ["pName"],// 1.传入参数setup(props, { emit, attrs, slots }) {let ppName = props.ppName;ppName = "二货";//子传父:context是什么?// console.log(context);// 子传父第三步const toChild = () => {emit("ppp", "我是子组件,我改变了");//子传父 和vue2的步骤一样,只是emit方法直接从context里面获取的 不再是this调用的};// 子传父第四步 导出事件// 第五步 通过点击将自定义的ppp方法和值传给父组件 return {ppName,toChild};},
};
</script><style>
</style>

父组件:

<template><div><h2>父组件</h2><!-- 子传父第六步 父组件接收子组件传来的方法 --><Child :pName="name" @ppp="fn" /></div>
</template><script>
//目标:子传父
//导入子组件
import Child from "../components/01-child.vue";
// 导入ref  用于做响应式处理
import { ref } from "vue";
export default {setup() {const name = ref("你好");//子传父第七步 事件接收 val代表子组件传入的值const fn = (val) => {console.log(val);name.value = val;};//.导出 如果想要数据在外部渲染 必须得导出return {name,//   子传父最后一步 导出fn,};},// 1.注册子组件components: {Child,},
};
</script><style>
</style>

最后

enter:如果有不清楚的地方欢迎留言!

Vue3中的父传子和子传父如何实现相关推荐

  1. vue中父传子和子传父,传值方法

    1.关于传值的规则 props值是对象的时候,传递的属性以对象的形式保存在props里面,对象里面的字段可以对传递的属性进行验证或者添加一些匹配验证规则. <div id="app&q ...

  2. vue 组件之间传值 父转子,子传父,同级别之间的传参,跨级别传参

    写这篇文章之前,我对vue组件之间的传值,还是只知道一些基础的传值方式.虽然工作中勉强能够应对,但是想要行云流水感觉还是心有余而力不足,所以在此,我想总结一下vue组件之间的一些传值方式供大家参考,同 ...

  3. vue组件,父传子、子传父、父调子、子调父简单理解总结

    总结目录 方法总结 子组件获取父组件变量(也可用父组件调用子组件中的方法传值) 父组件获取子组件变量(介绍两种方法) 父组件调用子组件中的方法 子组件调用父组件中方法(介绍两种方法) 方法总结 vue ...

  4. vue组件通信 - 父向子传、子向父传 (详细步骤)

    目录 一.父组件向子组件传值 1.要传递的值为 普通数据类型 的值, 2.要传递的值为 复杂数据类型.被变量接收的值类型 二.子组件向父组件传值 三.扩展 (注意:谁被引入,谁即为子组件) 一.父组件 ...

  5. Vue中ref的用法:获取DOM 父获取子数据 父使用子方法 子调用父方法

    获取本页面dom元素 <template><div id="app"><div ref="testDom">11111< ...

  6. CSS hover 父对子、子对父、同级之间的控制

    1,父对子 是指父元素触发hover事件,并且控制父元素中的子元素做出响应. <div class="d1"><p class="p1"> ...

  7. Vue3中Element-Plus的el-upload清空上传文件(最简单明了)

    核心技术: //取消上传,清空上传文件function doClear () {uploadrefss.value.clearFiles() } 汇总 <template> <div ...

  8. React (三) 修改props,React父传子、子传父、this绑定

    Props介绍与应用 什么是 props 如何使用 父传子 函数组件 类组件 默认值 子传父 修改 props 事件监听 this 绑定 直接在 jsx 元素上进行绑定(不推荐) 箭头函数(推荐) 直 ...

  9. vue3 setup 父传子,子传父

    vue3父子组件传值 vue3 setup父子传值 父组件把值传给子组件 举例:父组件: 子组件 父组件给子组件传值: <FatherComponent/> <son-compone ...

最新文章

  1. HDU1002(高精度模拟加法)
  2. 微软的 Android 计划:邪恶的天才计划或只是邪恶?
  3. centos 6.6 mysql5.7_CentOS 6.5/6.6 安装(install)mysql 5.7 最完整版教程-Go语言中文社区...
  4. java堆外内存为何比java堆更适合用来进行网络IO操作
  5. 高阶无模型自适应迭代学习控制学习记录
  6. 二分图的最大匹配--匈牙利算法
  7. 嵌入式应用程序下载到ARM开发板后如何运行程序?
  8. idea查看java类方法_用IntelliJ IDEA看Java类图的方法(图文)
  9. 小红书去水印代码_最新小红书视频去水印解析API接口
  10. 这世界没有能够预测未来的魔法水晶球
  11. 李嘉诚14句经典成功格言
  12. Redux中的reducer到底是什么,以及它为什么叫reducer?
  13. [20130827]A Short History of Nearly Everything[serial]
  14. 近期Domino相关产品要闻速览
  15. 如何计算CPU的算力
  16. IDEA设置中文/更改页面/IDEA字体大小颜色设置/IDEA注释取消斜体
  17. 汉字logo就是土?你怕是没见识过我们中国的这些标志
  18. 谁带火了化妆品小样经济?
  19. 重走Android路 之 挑几个基本控件玩玩(上卷)
  20. 基于HDP版本的YDB安装部署(转)

热门文章

  1. 探索未来:物联网的无限可能
  2. 服务型政府背景下移动政务建设的重要性及策略
  3. Golang 入门 : 符文
  4. 学oracle为什么,浅谈ORACLE的学习
  5. [艾兰岛][Ylands]从0开始学游戏开发_7.BOSS战
  6. Impala:impala-shell应用
  7. 计算机科学里的浪漫,从0到1,走近计算机世界的1001种浪漫
  8. 【微信小程序】组件的生命周期及自定义组件
  9. 手游神武2最新服务器,《神武4》手游2020年2月7日更新内容一览
  10. 朝华、雪狼湖、17173及其他