您现在的位置是:首页 > 技术教程 正文

vue3-setup语法糖 - 父子组件之间的传值

admin 阅读: 2024-03-31
后台-插件-广告管理-内容页头部广告(手机)

近期学习 vue3 的父子组件之间的传值,发现跟vue2的并没有太大的区别,然后发现网络上很少基于setup语法糖的教程,我这边总结一下,希望对大家有所帮助。

一、父组件向子组件传值

父组件向子组件传值的时候,子组件是通过props来接收的,然后以变量的形式将props传递到setup语法糖果中使用(defineEmits的到来!)。如下图所示:

1、父组件传递方式

  1. <script setup>
  2. import Child from './Child'
  3. import {ref} from 'vue'
  4. const parentMsg=ref('父组件传递值是a')
  5. script>
  6. <style scoped>
  7. style>

2、子组件接收方式和使用

  1. <script setup>
  2. import { toRefs, defineProps } from 'vue'
  3. const props = defineProps({
  4. //子组件接收父组件传递过来的值
  5. info: String,
  6. })
  7. //使用父组件传递过来的值
  8. const {info} =toRefs(props)
  9. script>
  10. <style>
  11. style>

 3、效果图

 

 二、子组件向父组件传值

vue3中子组件向父组件传递值和vue2.x的区别是vue2.x使用的是 $emit 而vue3使用的是emit,它们的传值一样都是方法加值,即vue2.x的是this.$emit('方法名','传递的值(根据需要传或者不传)'),vue3的setup语法糖的是defineEmits。vue3的子传父方式如下所示: 

1、子组件的传递方式

  1. <script setup>
  2. import { defineEmits } from 'vue'
  3. // 使用defineEmits创建名称,接受一个数组
  4. const emit = defineEmits(['clickChild'])
  5. const clickChild=()=>{
  6. let param={
  7. content:'b'
  8. }
  9. //传递给父组件
  10. emit('clickChild',param)
  11. }
  12. script>
  13. <style>
  14. style>

2、父组件接收与使用

  1. <script setup>
  2. import Child from './Child'
  3. import {ref} from 'vue'
  4. const result=ref('')
  5. const clickEven=(val)=>{
  6. console.log(val);
  7. result.value=val.content
  8. }
  9. script>
  10. <style scoped>
  11. style>

 3、效果图

 

三、父组件获取子组件中的属性值

当时用语法糖时,需要将组建的属性及方法通过defineExpose导出,父组件才能访问到数据,否则拿不到子组件的数据

1、子组件的传递方式

  1. <script setup>
  2. import { reactive, ref,defineExpose } from "vue";
  3. let sex=ref('男')
  4. let info=reactive({
  5. like:'王者荣耀',
  6. age:18
  7. })
  8. defineExpose({sex, info})
  9. script>
  10. <style>
  11. style>

2、父组件显示方式

  1. <script setup>
  2. import Child from './Child'
  3. import {ref} from 'vue'
  4. const testcomRef = ref()
  5. const getSonHander=()=>{
  6. console.log('获取子组件中的性别', testcomRef.value.sex );
  7. console.log('获取子组件中的其他信息', testcomRef.value.info )
  8. }
  9. script>
  10. <style scoped>
  11. style>

3、效果图

 

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索