mirror of
https://gitee.com/element-plus/element-plus.git
synced 2024-12-14 17:31:02 +08:00
39 lines
790 B
TypeScript
39 lines
790 B
TypeScript
import { provide } from 'vue'
|
|
|
|
import type { InjectionKey, ObjectDirective, Ref } from 'vue'
|
|
|
|
type ForwardRefSetter = <T>(el: T) => void
|
|
|
|
export type ForwardRefInjectionContext = {
|
|
setForwardRef: ForwardRefSetter
|
|
}
|
|
|
|
export const FORWARD_REF_INJECTION_KEY: InjectionKey<ForwardRefInjectionContext> =
|
|
Symbol('elForwardRef')
|
|
|
|
export const useForwardRef = <T>(forwardRef: Ref<T | null>) => {
|
|
const setForwardRef = (el: T) => {
|
|
forwardRef.value = el
|
|
}
|
|
|
|
provide(FORWARD_REF_INJECTION_KEY, {
|
|
setForwardRef,
|
|
})
|
|
}
|
|
|
|
export const useForwardRefDirective = (
|
|
setForwardRef: ForwardRefSetter
|
|
): ObjectDirective => {
|
|
return {
|
|
mounted(el) {
|
|
setForwardRef(el)
|
|
},
|
|
updated(el) {
|
|
setForwardRef(el)
|
|
},
|
|
unmounted() {
|
|
setForwardRef(null)
|
|
},
|
|
}
|
|
}
|