UNPKG

element-plus

Version:
25 lines (24 loc) 985 B
import { getCurrentInstance, reactive, shallowRef, watchEffect, } from 'vue'; import { entries } from '../../utils/util'; const DEFAULT_EXCLUDE_KEYS = ['class', 'style']; const LISTENER_PREFIX = /^on[A-Z]/; export default (params = {}) => { const { excludeListeners = false, excludeKeys = [] } = params; const instance = getCurrentInstance(); const attrs = shallowRef({}); const allExcludeKeys = excludeKeys.concat(DEFAULT_EXCLUDE_KEYS); // Since attrs are not reactive, make it reactive instead of doing in `onUpdated` hook for better performance instance.attrs = reactive(instance.attrs); watchEffect(() => { const res = entries(instance.attrs) .reduce((acm, [key, val]) => { if (!allExcludeKeys.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key))) { acm[key] = val; } return acm; }, {}); attrs.value = res; }); return attrs; };