mirror of
https://gitee.com/element-plus/element-plus.git
synced 2024-12-15 18:01:24 +08:00
bbd16a08e9
* refactor(hooks): remove use-css-var * refactor(hooks): remove use-events * refactor(hooks): remove use-migrating * refactor(hooks): remove use-transition * refactor(hooks): named export useAttrs * refactor(hooks): named export useFocus * refactor(hooks): refactor useFormItem * refactor(hooks): refactor useGlobalConfig * refactor(hooks): refactor useLocale * refactor(hooks): refactor useLockscreen * refactor(hooks): refactor useModal * refactor(hooks): refactor useModelToggle * refactor(hooks): refactor usePreventGlobal * refactor(hooks): refactor useRestoreActive * refactor(hooks): refactor useTeleport * refactor(hooks): refactor useThrottleRender * refactor(hooks): refactor useTimeout * refactor(hooks): refactor useTransitionFallthrogh
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { getCurrentInstance, computed } from 'vue'
|
|
import fromPairs from 'lodash/fromPairs'
|
|
import { debugWarn } from '@element-plus/utils/error'
|
|
|
|
import type { ComputedRef } from 'vue'
|
|
|
|
interface Params {
|
|
excludeListeners?: boolean
|
|
excludeKeys?: string[]
|
|
}
|
|
|
|
const DEFAULT_EXCLUDE_KEYS = ['class', 'style']
|
|
const LISTENER_PREFIX = /^on[A-Z]/
|
|
|
|
export const useAttrs = (
|
|
params: Params = {}
|
|
): ComputedRef<Record<string, unknown>> => {
|
|
const { excludeListeners = false, excludeKeys = [] } = params
|
|
const allExcludeKeys = excludeKeys.concat(DEFAULT_EXCLUDE_KEYS)
|
|
|
|
const instance = getCurrentInstance()
|
|
if (!instance) {
|
|
debugWarn(
|
|
'use-attrs',
|
|
'getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function'
|
|
)
|
|
return computed(() => ({}))
|
|
}
|
|
|
|
return computed(() =>
|
|
fromPairs(
|
|
Object.entries(instance.proxy?.$attrs!).filter(
|
|
([key]) =>
|
|
!allExcludeKeys.includes(key) &&
|
|
!(excludeListeners && LISTENER_PREFIX.test(key))
|
|
)
|
|
)
|
|
)
|
|
}
|