Я создал проект на Vue.js 3 и TypeScript.
router.js
{
path: "/app/:id",
name: "Detail",
component: Detail,
props: true
},
App.js
<script lang = "ts">
...
onMounted(() => {
const id = $route.params.id;
...
});
Но это приводит к ошибке:
"Cannot find name '$route'."
Что я делаю не так?
Vue Router 4.x предоставляет для этого useRoute():
import { useRoute } from 'vue-router'
export default {
setup() {
const route = useRoute()
onMounted(() => {
const id = route.params.id
})
}
}
~"Свойство params не существует для типа Router.ts(2339)"~ -> Обновление: неважно, используйтеRoute без r в конце... facepalm
Если мы используем новейший способ SFC «настройка сценария» Vue 3, то
<script setup>
import { useRoute } from 'vue-router';
const route = useRoute();
const id = route.params.id; // read parameter id (it is reactive)
</script>
вы также можете использовать составной API, чтобы написать свою собственную композицию, которая предлагает более приятный синтаксис и изящно обрабатывает, когда параметр является массивом.
const id = useRouteParam('id')
состав
import { computed, Ref } from 'vue'
import { useRoute } from 'vue-router'
export function useRouteParam(param: string, useFirstIfArray?: true): Ref<string>
export function useRouteParam(param: string, useFirstIfArray: false): Ref<string | string[]>
export function useRouteParam(param: string, useFirstIfArray = true): Ref<string | string[]> {
const route = useRoute()
return computed(() => {
let paramValue = route.params[param]
if (useFirstIfArray && Array.isArray(paramValue) && paramValue.length) {
[paramValue] = paramValue
}
return paramValue
})
}
https://github.com/PrefectHQ/vue-compositions/tree/main/src/useRouteParam
используйте этот. $ маршрут