diff --git a/package-lock.json b/package-lock.json index 20166a9..cc81af8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vue2-helpers", - "version": "1.1.0", + "version": "1.1.6", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -72,6 +72,23 @@ "tslib": "^2.3.0" } }, + "@vueuse/core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-7.1.2.tgz", + "integrity": "sha512-SLoOPfhZdNRNUkZfx+wrHj6WycWdSw2RmNS8E4ngQ2kmBoJjRarGy51/GkGdjqHQqmhuwuFoNO2WaU0yBn3ffg==", + "requires": { + "@vueuse/shared": "7.1.2", + "vue-demi": "*" + } + }, + "@vueuse/shared": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-7.1.2.tgz", + "integrity": "sha512-AjYh4y9S5FMOoHDsysqcXY/1mpqNTrnWUD50yaaiyf+5kGWQVIpAkkjKZlYSC/NHKxxCRn0cLR4nWMzceUWewQ==", + "requires": { + "vue-demi": "*" + } + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -337,6 +354,11 @@ "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==", "dev": true }, + "vue-demi": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.1.tgz", + "integrity": "sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==" + }, "vue-router": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.2.tgz", diff --git a/package.json b/package.json index 2084a28..c4a6d3e 100644 --- a/package.json +++ b/package.json @@ -47,5 +47,8 @@ "composition", "vuex", "vue-router" - ] + ], + "dependencies": { + "@vueuse/core": "^7.1.2" + } } diff --git a/src/vue-router.ts b/src/vue-router.ts index 397029e..7de626d 100644 --- a/src/vue-router.ts +++ b/src/vue-router.ts @@ -1,6 +1,7 @@ import Vue from 'vue' -import { computed, ComputedRef, getCurrentInstance, reactive, shallowRef } from '@vue/composition-api' +import { computed, getCurrentInstance } from '@vue/composition-api' import VueRouter, { NavigationGuard, Route, RouterOptions } from 'vue-router' +import { toReactive } from '@vueuse/core'; import { OUT_OF_SCOPE, warn } from './utils' @@ -56,32 +57,18 @@ export function useRouter(): Router { } -let currentRoute: RouteLocationNormalizedLoaded - export function useRoute() { - const router = useRouter() - if (!currentRoute) { - const routeRef = shallowRef({ - path: '/', - name: undefined, - params: {}, - query: {}, - hash: '', - fullPath: '/', - matched: [], - meta: {}, - redirectedFrom: undefined, - } as Route); - const computedRoute = {} as { - [key in keyof Route]: ComputedRef - } - for (const key of Object.keys(routeRef.value) as (keyof Route)[]) { - computedRoute[key] = computed(() => routeRef.value[key]) - } - router.afterEach(to => routeRef.value = to) - currentRoute = reactive(computedRoute) + const inst = getCurrentInstance() + + if (inst) { + return toReactive( + computed(() => inst.proxy.$route), + ); } - return currentRoute + + warn(OUT_OF_SCOPE) + + return undefined as any }