zhengyiming
2025-02-12 006e8527857850dfd01371384afa532af5a001f7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<script lang="ts">
import { PortalMethods } from './portal';
 
export default defineComponent({
  name: 'PortalConsumer',
  props: {
    manager: {
      type: Object as PropType<PortalMethods>,
    },
  },
  setup(props) {
    const _key = ref<number>();
 
    const slots = useSlots();
 
    onMounted(() => {
      if (!props.manager) {
        throw new Error('forgot');
      }
      const defaultSlot = slots.default();
      props.manager.update(_key.value, defaultSlot);
      _key.value = props.manager.mount(defaultSlot);
    });
 
    onUpdated(() => {
      const defaultSlot = slots.default();
      props.manager.update(_key.value, defaultSlot);
    });
 
    onUnmounted(() => {
      props.manager.unmount(_key.value);
    });
 
    return () => null;
  },
});
</script>