Skip to content

Commit 4a50b12

Browse files
authored
Improve slot ref composable (#21)
* Improve slot ref composable * Add default settings file
1 parent bff6687 commit 4a50b12

File tree

4 files changed

+19
-6
lines changed

4 files changed

+19
-6
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ dist-ssr
1515
# Editor directories and files
1616
.vscode/*
1717
!.vscode/extensions.json
18+
!.vscode/settings.default.json
1819
.idea
1920
.DS_Store
2021
*.suo

.vscode/settings.default.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Please convert this file name to settings.json and use settings below.
2+
{
3+
"[rust]": {
4+
"editor.defaultFormatter": "rust-lang.rust-analyzer"
5+
},
6+
"eslint.enable": true,
7+
"editor.codeActionsOnSave": {
8+
"source.fixAll.eslint": true
9+
},
10+
"vue.complete.casing.props": "camel",
11+
"vue.complete.casing.tags": "pascal"
12+
}

src/components/SlotRef.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const { renderSlot, element } = useSlotWithRef()
1717

1818
<template>
1919
<Component
20-
:is="renderSlot"
20+
:is="renderSlot()"
2121
v-bind="$attrs"
2222
/>
2323

src/composables/useSlotWithRef.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@ const vRef: Directive<HTMLElement, (el: HTMLElement) => void> = (el, { value })
66
/**
77
* @param slotName Target slot default value: "default"
88
*/
9-
export function useSlotWithRef() {
9+
export function useSlotWithRef<SlotProps extends Record<string, any> = {}>(key = 'default') {
1010
const slots = useSlots()
1111
const element: Ref<HTMLElement | null> = ref(null)
1212

1313
function handleRef(el: HTMLElement) {
1414
element.value = el
1515
}
1616

17-
function renderSlot() {
18-
if ('default' in slots) {
19-
const [slot] = slots.default!()
17+
function renderSlot(props?: SlotProps) {
18+
if (key in slots) {
19+
const [slot] = (slots as any)[key](props)
2020
return withDirectives(slot, [[vRef, handleRef]])
2121
}
2222

23-
return null
23+
return undefined
2424
}
2525

2626
return {

0 commit comments

Comments
 (0)