setup中使用
<script setup>
import { getCurrentInstance, onMounted } from 'vue';
onMounted(() => {
const instance = getCurrentInstance().proxy;
if (instance && instance.getOpenerEventChannel) {
const eventChannel = instance.getOpenerEventChannel();
eventChannel.on('acceptDataFromOpenerPage', function ({ data }) {
console.log(data);
});
}
});
</script>
setup typescript中使用
<script setup lang="ts">
import type { ComponentPublicInstance } from '@vue/runtime-core';
namespace OpenerEventSystem {
export interface EventChannel {
on<T = any>(event: string, callback: (data: T) => void): void;
emit<T = any>(event: string, data: T): void;
}
}
interface CustomOpenerEventChannel extends ComponentPublicInstance {
getOpenerEventChannel(): OpenerEventSystem.EventChannel;
}
function useOpenerEventChannel(): OpenerEventSystem.EventChannel | null {
const currentInstance = getCurrentInstance();
if (currentInstance) {
const proxy = currentInstance.proxy as CustomOpenerEventChannel;
if (proxy.getOpenerEventChannel) {
return proxy.getOpenerEventChannel();
}
}
return null;
}
import { onMounted } from 'vue';
onMounted(() => {
const eventChannel = useOpenerEventChannel();
if (eventChannel) {
eventChannel.on<TeacherClassResponse>('acceptDataFromOpenerPage', (data) => {
console.log('Received data:', data);
});
}
});
</script>