vue3.0父子组件通信

vue3更新了很多新的特性,这里就只针对父子组件传参来写一下。

父组件中

<template>
<div class="home">
<div v-for="(item,index) in applyList" :key="index" >
<!--传递参数index,dataObj-->
  <list-item ref="listItemRef" @clickList="clickList" @deleteList="deleteList" :dataObj="item" :index="index"></list-item>
</div>
</template>
import ListItem from '@/views/homePage/components/listItem.vue'//引入子组件
import { onMounted,reactive,toRefs,computed,ref} from 'vue'
export default {
components:{
  ListItem
},
setup(){
//定义数据
  const state:any=reactive({
    applyList:[],
    listItemRef:null//用于获取子组件节点及其相应属性
    time
  })
  //原有的mounted(){}方法,由于vue3的特性要根据需要引入
  onMounted(() => {
  })
   //computed属性也需要引入
   state.time = computed(()=>{
      return ''
   })
   //在页面上的子元素里写ref="listItemRef"
   state.listItemRef = ref(null);
   const clickList=(index:number|string)=>{
   //可以通过state.listItemRef.xxx来访问子组件的属性或调用其方法,类似于原来vue的this.refs.listItemRef.XXX
      state.listItemRef.deleteList()
    }
    //子组件触发的父组件的方法
    const deleteList=(id:string)=>{
    
    }
    return{
      ...toRefs(state),//…toRefs(state)将响应式数据平铺,以便于视图中绑定,要在上面先引入toRefs
      clickList,//将方法return出去
      deleteList
    }
  }
}

子组件中

<template>
      <div @click="clickTime">
      {{dataObj}}
      <div>
      <div @click="deleteList">删除</div>
</template>
export default {
  name:'ListdataObj',
   props: {
    dataObj:Object,
    index:Number,
  },
  setup(props:any,ctx:any){//props:为父组件传递过来的数据,ctx:Vue3公开的选定属性(emit、slots、 attrs)
    console.log(props.dataObj.id,ctx,'子组件')
    const clickTime=()=>{
    //触发父组件中的对应方法,并传参
      ctx.emit('clickList',props.index)
    }
    const deleteList=()=>{
      console.log('deleteList')
      ctx.emit('deleteList',props.dataObj.id)
    }
    return {
      clickTime,
      deleteList
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值