vue3.2中的defineProps、defineEmits、defineExpose

1.defineExpose---主动暴露出来方法

子组件:

import { ref defineExpose } from 'vue'
const handleNodeClick = () => {
 console.log('要执行的方法')
}
//将方法暴露出
defineExpose({ handleNodeClick})

父组件:

// 通过ref
<tree :show="show" ref="treeRef"></tree>  
const treeRef = ref()
const handleClick = () => {
    // 获取ref中的子组件方法handleNodeClick()
 treeRef.value.handleNodeClick()
}

2.defineEmits---传事件的同时带上所传的值

子组件:

import { ref, defineEmits } from 'vue'
const emits = defineEmits(['handleNodeClick'])
const handleNodeClick = (e) => {
 emits('gatewayData', label.value)
}

父组件:

//getGatewayData要获取的参数
<tree :show="show" @gatewayData="getGatewayData"></tree>
//执行方法获取参数
const getGatewayData = (e) => {
  console.log('getGatewayData', e) // 这里的e,就是子组件传过来的值label.value
}

3.defineProps---获取组件传值

<template>
<h1>{
   
   { msg }}</h1>
</template>
<script setuplang="ts">
// 采⽤ts专有声明,⽆默认值
defineProps<{
    msg: string,
    num?: number
}>()

// 采⽤ts专有声明,有默认值
interface Props {
  msg?: string
  labels?: string[]
}
const props =withDefaults(defineProps<Props>(),{
      msg:'hello',
      labels:()=>['one','two']
})

// ⾮ts专有声明
defineProps({
    msg: String,
    num:{
        type:Number,
        default:''
    }
})
</script>

猜你喜欢

转载自blog.csdn.net/weixin_43550562/article/details/124705539