UNPKG

nutui-uniapp

Version:

京东风格的轻量级移动端 Uniapp、Vue3 组件库(支持小程序开发)

33 lines (25 loc) 781 B
import { computed, getCurrentInstance, inject, onUnmounted, ref } from 'vue' import type { ComponentInternalInstance, InjectionKey } from 'vue' type ParentProvide<T> = T & { add: (child: ComponentInternalInstance) => void remove: (child: ComponentInternalInstance) => void internalChildren: ComponentInternalInstance[] } export function useInject<T>(key: InjectionKey<ParentProvide<T>>) { const parent = inject(key, null) if (parent) { const instance = getCurrentInstance()! const { add, remove, internalChildren } = parent add(instance) onUnmounted(() => remove(instance)) const index = computed(() => internalChildren.indexOf(instance)) return { parent, index, } } return { parent: null, index: ref(-1), } }