vue3.0---父子组件之间传值

father.vue

<template>
  <div>
    我是father父组件
    <child :msg="msg" @sendFn="sendFn"></child>
    <div>
      我是子组件传过来的值:{{subTrans}}
    </div>
  </div>
</template>
<script>
import { defineComponent,reactive,computed,ref } from 'vue'
import child from '@/components/children/child'
export default defineComponent({
  name:'about',
  components:{
    child
  },
  setup() {
    let msg = '我是father向sub传的值'
    let subTrans = reactive({})
    let sendFn= (val)=>{
      console.log(val)
      subTrans.value = val
    }
    return{
      msg,
      sendFn,
      subTrans
    }
  },
})
</script>

child.vue

<template>
  <div>我是sub子组件</div>
  <div>{{ msg }}</div>
  <div>
      <button @click="transFn">点我向父组件传值</button>
  </div>
</template>
<script>
import { defineComponent, onMounted } from "vue";

export default defineComponent({
  name: "subChild",
  props: {
    msg: {
      type: String,
      required: true,
      default: "",
    },
  },
  emits: ["sendFn"],//添加这一行解决
  setup(props,ctx) {
      let childMsg="我是sub,我要传给father"
      let childObj={'name':'sub','value':'zhihui 19'}
      console.log(props.msg)
      onMounted(()=>{
          ctx.emit('sendFn',childMsg)
      })
      let transFn=()=>{
           ctx.emit('sendFn',childObj)
      }
    return {childMsg,childObj,transFn};
  },
});
</script>

画重点:
报错1:
在这里插入图片描述
报错2:
在这里插入图片描述
vue3.0与vue2.0不同之处:
1.子组件中接收Props里的定义一样,在页面中使用的话直接使用msg就可以了。如果要在setup里获取msg,需要借助setup里第一个参数props.
2.在子组件中将数据提交给父组件 ,需要使用setup里第二个参数ctx.通过ctx.emit(‘sendFn’,childObj)来给调用父组件方法
3.在父组件中,定义子组件调用的方法即可,这个是一样的。注意一点是,在方法里将得到的值输出到页面中,这里是可以动态绑定的,不再需要用vue2.0里的$set方法。但是,注意的一点是,输出给页面中的变量subTrans赋值时,要写成subTrans.value才可以。
在vue3.0中,变量获取值都需要添加**.value这样的书写方法,我已经踩了无数次的坑了。每次都忘 。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值