params和query都是Vue中實現路由傳參的方式。params通常用于傳遞必須的參數,query則用于傳遞可選參數。params和query的使用方式不同,需要開發者根據實際需求進行選擇。
使用params進行路由傳參時,需要在路由定義時設置路由參數。例如:
const router = new VueRouter({ routes: [ { path: '/user/:id', component: User } ] })
在上述代碼中,路由/user/:id中的:id即為參數,當用戶跳轉到/user/123時,123作為參數進行傳遞,組件User就可以在this.$route.params.id中獲取到這個值。
對于query也是同樣的道理,只不過它的路由定義中不需要像params那樣設置參數名。例如:
const router = new VueRouter({ routes: [ { path: '/user', component: User } ] })
這時候我們可以在訪問/user?name=Tom&age=18時,通過this.$route.query獲取到傳遞的參數。query的參數可以有多個,使用“&”符號隔開,例如/user?name=Tom&age=18&gender=male。
在實際開發中,有時候我們需要在路由跳轉時使用params和query同時進行傳參。這時候我們可以在router-link中添加to屬性進行傳參。例如:
我的主頁
上述代碼中,我們傳遞了params參數id,和query參數name和age,這些參數全部可以在組件內通過this.$route獲取到。
另外,為了在代碼中更加清晰地處理params和query的參數,在路由定義時可以設置name屬性,例如:
const router = new VueRouter({ routes: [ { path: '/user/:id', name: 'user', component: User } ] })
這樣就可以通過name來進行路由跳轉,而不用直接訪問path。
需要注意的是,當params的參數名和query的參數名重復時,params將會覆蓋query的參數值,因此不同類型的參數名最好不要重復。
總體來說,params和query都是Vue中實現路由傳參的有效方式,可以根據實際需求進行選擇和使用。