Vue3中關于路由規(guī)則的props配置方式
簡單介紹
在 Vue3 中,使用 Vue Router 進行路由管理時,可以通過配置路由規(guī)則的 props 屬性,將路由參數(shù)傳遞給組件。
這樣可以使路由參數(shù)直接作為組件的屬性,在組件中使用更加方便
在路由配置中使用 props
在定義路由規(guī)則時,可以通過設置 props 屬性來指定如何將路由參數(shù)傳遞給組件。
props 可以是一個布爾值、對象或函數(shù)
props的第一種寫法
我們來回顧一下上節(jié)對于Detail.vue中的代碼,使用的是params參數(shù)
<template>
<ul class="news-list">
<li>編號:{{ route.params.id }}</li>
<li>標題:{{ route.params.title }}</li>
<li>內(nèi)容:{{ route.params.content }}</li>
</ul>
</template>
<script setup lang="ts" name="About">
import { useRoute } from 'vue-router'
let route = useRoute()
</script>
<style scoped>
.news-list {
list-style: none;
padding-left: 20px;
}
.news-list>li {
line-height: 30px;
}
</style>
如果我們不想在模版中寫route的話,我們需要使用torefs進行結(jié)構(gòu),下面的博客或許會幫助你
Vue3 toRefs和toRef在reactive中的一些應用
修改后的代碼如下,和之前的運行結(jié)果是一樣的
<template>
<ul class="news-list">
<li>編號:{{ params.id }}</li>
<li>標題:{{ params.title }}</li>
<li>內(nèi)容:{{ params.content }}</li>
</ul>
</template>
<script setup lang="ts" name="About">
import { toRefs } from 'vue'
import { useRoute } from 'vue-router'
let route = useRoute()
let {params} = toRefs(route)
</script>
<style scoped>
.news-list {
list-style: none;
padding-left: 20px;
}
.news-list>li {
line-height: 30px;
}
</style>
這樣我們就可以省略了route,但是如果我們還想省略params呢,該怎么做

接下來我們引入props,來實現(xiàn)無需寫route和params
首先我們需要在index.ts中加上一句

再之后我們就在Detail.vue的ts里面加上一句就可以完美的實現(xiàn)之前的代碼了
<script setup lang="ts" name="About"> defineProps(['id','title','content']) </script>
完整代碼如下
<template>
<ul class="news-list">
<li>編號:{{ id }}</li>
<li>標題:{{ title }}</li>
<li>內(nèi)容:{{ content }}</li>
</ul>
</template>
<script setup lang="ts" name="About">
defineProps(['id','title','content'])
</script>
<style scoped>
.news-list {
list-style: none;
padding-left: 20px;
}
.news-list>li {
line-height: 30px;
}
</style>
上面僅僅是第一種寫法,大概意思就是將路由收到的所有params參數(shù)作為props傳給路由組件
props的第二種寫法
這種寫法是使用函數(shù)的形式
props(route){
return route.params
}
當然也是可以使用query的
props(route){
return route.query
}
但是使用query別忘了修改點地方


事實證明,也是可以實現(xiàn)的
props的第三種寫法
第三種寫法是對象寫法
- 對象寫法相對于函數(shù)寫法更加靜態(tài),因為它直接將固定的值傳遞給組件屬性,無法根據(jù)路由的動態(tài)變化來改變傳遞的值。
- 而函數(shù)寫法可以根據(jù)需要動態(tài)地返回不同的屬性值,更加靈活。
- 因此,在需要根據(jù)路由動態(tài)變化屬性值的情況下,使用函數(shù)寫法更加合適;而在屬性值固定的情況下,使用對象寫法可能更為簡潔明了
就是較為固定,如果想動態(tài)還是函數(shù)比較好
總結(jié)
通過合理配置路由規(guī)則的 props 屬性,可以使路由參數(shù)更加靈活地傳遞給組件。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue中的ref作用詳解(實現(xiàn)DOM的聯(lián)動操作)
這篇文章主要介紹了Vue中的ref作用詳解(實現(xiàn)DOM的聯(lián)動操作),需要的朋友可以參考下2017-08-08
Vue3如何通過ESLint校驗代碼是否符合規(guī)范詳解
ESLint可以靈活設置規(guī)則,也發(fā)布了很多公開的規(guī)則集,下面這篇文章主要給大家介紹了關于Vue3如何通過ESLint校驗代碼是否符合規(guī)范的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-07-07
vue?beforeDestroy?clearInterval清除定時器失效的解決
這篇文章主要介紹了vue?beforeDestroy?clearInterval清除定時器失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06

