Skip to content

Commit 18436ec

Browse files
committed
feat(BetterRouterView)!: 完整支持原生 RouterView 插槽组件模板引用方式
通过 `Proxy` 完整支持原生 `RouterView` 插槽组件模板引用方式,不再需要二次导出 `inner` 属性,且同时移除 `viewKey` 属性。
1 parent a8c218b commit 18436ec

File tree

5 files changed

+24
-4
lines changed

5 files changed

+24
-4
lines changed

play/src/layout/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ watch(
4646
:sidebar-props="{ routes }"
4747
>
4848
<BetterRouterView
49-
v-slot="{ route, Component: viewComponent }"
49+
v-slot="{ Component: viewComponent }"
5050
:resolve-view-key
5151
>
5252
<KeepAlive :include="[...keepAliveValues]">

play/src/views/List.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts" setup>
22
import { ref } from 'vue'
3-
import { useRouter } from 'vue-router'
3+
import { useRoute, useRouter } from 'vue-router'
44
import { keepAliveValues } from '@/stores/keepAlive'
55
66
const details = ref<{ time: number }[]>([])
@@ -19,6 +19,10 @@ function gotoDetail(
1919
}
2020
router.push(fullPath)
2121
}
22+
23+
defineExpose({
24+
test: useRoute().fullPath,
25+
})
2226
</script>
2327

2428
<template>

play/src/views/List2.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts" setup>
22
import { ref } from 'vue'
3-
import { useRouter } from 'vue-router'
3+
import { useRoute, useRouter } from 'vue-router'
44
import { keepAliveValues } from '@/stores/keepAlive'
55
66
const details = ref<{ time: number }[]>([])
@@ -19,6 +19,10 @@ function gotoDetail(
1919
}
2020
router.push(`${path}?time=${item.time}`)
2121
}
22+
23+
defineExpose({
24+
test: useRoute().fullPath,
25+
})
2226
</script>
2327

2428
<template>

play/src/views/ListDetail.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ const route = useRoute()
55
const receiveTime = new Date(+route.query.time!).toLocaleString()
66
const currentTime = new Date().toLocaleString()
77
const isEquals = receiveTime === currentTime
8+
9+
defineExpose({
10+
test: route.fullPath,
11+
})
812
</script>
913

1014
<template>

src/BetterRouterView.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,15 @@ export const BetterRouterView: new () => {
5959
inheritAttrs: false,
6060
setup(_, { attrs, slots, expose }) {
6161
const inner$: ShallowRef<any> = shallowRef()
62-
expose({ inner: inner$, viewKey: name })
62+
expose(
63+
new Proxy(
64+
{},
65+
{
66+
get: (t, p) => Reflect.get(inner$.value || t, p),
67+
has: (t, p) => Reflect.get(inner$.value || t, p),
68+
},
69+
),
70+
)
6371
return () => h(viewComponent, { ...attrs, ref: inner$ }, slots)
6472
},
6573
}),

0 commit comments

Comments
 (0)