法1 :ref

1:定义页面组件或者组件

子组件页面

<template>
    <!---添加和编辑视频 -->        
    <el-dialog v-model="dialogVisible" title="添加课程" top="10vh" 
    width="640px" :before-close="handleClose">
        
    </el-dialog>
</template>
​
<script setup>
import {ref} from 'vue'
const dialogVisible = ref(false)
​
// 打开用户弹窗组件
const handleOpen = ()=>{
  dialogVisible.value = true;
}
// 关闭用户弹窗组件
const handleClose = ()=>{
  dialogVisible.value = false;
}
​
// 子组件默认包含是私有
defineExpose({
  handleOpen,
  handleClose
})   
​
</script>
​
<style lang="scss" scoped>
​
</style>>

2: 要暴露被外界定义的方法

import {ref} from 'vue'
const dialogVisible = ref(false)
​
// 打开用户弹窗组件
const handleOpen = ()=>{
  dialogVisible.value = true;
}
// 关闭用户弹窗组件
const handleClose = ()=>{
  dialogVisible.value = false;
}
​
// 子组件默认包含是私有
defineExpose({
  handleOpen,
  handleClose
})   

父组件页面

3: 调用组件的方法

(1)导入上面定义的页面组件

import UserDialog from '@/view/video/components/UserDialog.vue'

(2)然后定义组件

 在父组件中使用子组件   注意要使用ref: userDialogRef
<user-dialog ref="userDialogRef"></user-dialog>

(3)给组件取个ref名字

const userDialogRef = ref("")

这个名字就可以调用到组件中通过defineExpose暴露的方法

4: 调用方法

<el-button type="primary" @click="handleOpenUserDialog">请选择用户</el-button>
​
// 打开用户弹窗
const handleOpenUserDialog = ()=>{
  userDialogRef.value.handleOpen()
}
​

法2: emits

父组件页面: 使用子组件  并定义 子组件上的自定义事件load,传入父组件里面自己定义的函数

 <add-video ref="addVideoRef" @load="handleLoadData"></add-video>

 子组件页面:

//定义
 const  emits = defineEmits(["load"])
//使用
 emits("load")

法3 : provide  inject

父页面:

provide("handleLoadData",handleLoadData)

子页面

const handleLoadData = inject("handleLoadData")

handleLoadData()

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐