vue3父子传值和插槽

父组件:

<template>
  <div>父组件
    <Child :msg="info" @fatherEvent="fatherCon">
       <!-- 默认插槽 -->
      <!-- <span>父组件数据插在子组件</span> -->

      <!-- 具名插槽 -->
      <template #abc>具名插槽数据</template>

    </Child>
  </div>
</template>

<script>
import {reactive,ref } from 'vue'
import Child from './child.vue'
export default {
  name: 'father',
  components:{
    Child
  },
  setup(){
    let info = reactive({
      name:'哈哈',
      age:'18',
      hobby:['打球', '洗完', '洗衣服']
    })

    function fatherCon(value){
      console.log(value,'我是父组件');
    }
    // let info = ref('父数据')

    return {info, fatherCon}
  }
  

}
</script>

子组件:

<template>
  <div>我是子组件

   <p>{{listData.name}}</p>
   <p>{{listData.age}}</p>
   <ol>
     <li v-for="(item,index) in listData.hobby" :key="index">{{item}}</li>
   </ol>

   <button @click="handlerFather">点击触发父组件</button>

   <!-- 默认插槽 -->
   <!-- <slot></slot> -->

   <!-- 具名插槽 -->
   <slot name="abc"></slot>



  </div>
</template>

<script>
import {reactive} from 'vue'
export default {
  name: 'child',
  props:['msg'],
  setup(props, context){

    let listData = reactive({
      name: props.msg.name,
      age: props.msg.age,
      hobby:props.msg.hobby
    })


    function handlerFather(){
      context.emit('fatherEvent', '父组件你好,我是子组件')
    }

    return {listData, handlerFather}
    
  },
 
}
</script>

具名插槽

在vue3中具名插槽身上直接写slot="xxx"不生效,将slot改为v-slot:插槽名即可

<template slot='abc'>xxx</template>

<template v-slot:abc>xxx</template>

在使用具名插槽,给template标签上设置v-slot数据不显示,改成#缩写形式就生效。可能是某些地方写错了,明天继续看下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值