์ฃผ์ด์ง ํจํด์ ๊ฐ์ง ๋ผ์ฐํธ๋ฅผ ๋์ผํ ์ปดํฌ๋ํธ์ ๋งคํํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ฃผ ์๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ๋ชฉ๋ก(User List) ๋
/users
์ ๊ฐ์ ๊ฒฝ๋ก์ ๋งคํ๋๋ฉด ๋์ง๋ง ์ฌ์ฉ์ ์์ธ(User Detail) ๋ ์ฌ์ฉ์ ์๋ณ์ ๋ณ๋ก ๊ฐ์ ์ปดํฌ๋ํธ์ ๋งคํ ๋์ด์ผ ํ๋ค. ์ด๋ด๋ Vue Router์์๋ ๊ฒฝ๋ก์์ ๋์ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค. ์ด๋ฅผparam
๋ผ๊ณ ํ๋ค.
ex) /user/alice, /user/alice2, /user/alice3 .... -> UserComponent.vue
index.js
// router/index.js
// ':' <- ๋์ ๋ผ์ฐํ
์ด๋ผ๋ํ๋ฉฐ ์ฌ๋ฌ ๊ฐ์ URL์ ํ๋์ ํ์ด์ง ์ปดํฌ๋ํธ์ ๋งตํํ๊ณ ์ถ์๋
// ํํํ๋ ํํ ๋ฐฉ์์ด๋ค.
// ์ด ์ธ๋ฏธ์ฝ๋ก ์ ํ๋ผ๋ฏธํฐ๋ผ๊ณ ํด์ ๋ผ์ฐํธ ๊ฐ์ฒด์ params๋ก ๋ฐ์ ์ ์๋ค. -> {{ $route.params }}
{
path: '/posts/:id',
name: 'PostDetail',
component: PostDetailView,
},
{
path: '/posts/:id/edit',
name: 'PostEdit',
component: PostEditView,
},
:
)์ผ๋ก ํ์ํ๋ค.$route.params
ํ๋๋ก ์ ๊ทผํ ์ ์๋ค.<template>
<div>
<h2>์ ๋ชฉ</h2>
<p>{{ $route.params }}</p>
.....
</template>
์ด๋ ๊ฒ $route.params
์ฌ์ฉํ์ฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ์ ์๋ค.
$route.params
์ธ์๋$route
๊ฐ์ฒด๋$route.query(์ฟผ๋ฆฌ์คํธ๋ง)
,$route.hash(ํด์ํ๊ทธ)
๋ฑ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ ์ฉํ ์ ๋ณด๋ ๋ ธ์ถํ๋ค.
query
<template>
<div>
<h2>์ ๋ชฉ</h2>
<p>params: {{ $route.params }}</p>
<p>query: {{ $route.query }}</p>
<p>query value: {{ $route.query.searchText }}</p>
.....
hash
<template>
<div>
<h2>์ ๋ชฉ</h2>
<p>params: {{ $route.params }}</p>
<p>query: {{ $route.query }}</p>
<p>query value: {{ $route.query.searchText }}</p>
<p>hash: {{ $route.hash }}</p>
.....
<RouterLink>
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ์ ๋ค๋น๊ฒ์ด์ ์ฉ anchor ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ธ์๋ ๋ผ์ฐํฐ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ํํ ์ ์๋ค.
๋ค๋ฅธ URL๋ก ์ด๋ํ๋ ค๋ฉด
router.push
๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด ๋ฉ์๋๋ ์๋ก์ด ํญ๋ชฉ์ ํ์คํ ๋ฆฌ์คํ์ ๋ฃ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ด์ URL๋ก ์ด๋ํ๊ฒ ๋๋ค. ์ด ๋ฉ์๋๋<RouterLink>
๋ฅผ ํด๋ฆญ ํ ๋ ๋ด๋ถ์ ์ผ๋ก ํธ์ถ๋๋ ๋ฉ์๋์ด๋ฏ๋ก<RouterLink :to="..">
๋ฅผ ํด๋ฆญํ๋ฉดrouter.push(..)
๋ฅผ ํธ์ถํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ผ๋ฐ ํ๋ผ๋ฏธํฐ(
:id
)๋ ์ฌ๋์ฌ(/
)๋ก ๊ตฌ๋ถ๋ URL ์ฌ์ด์ ๋ฌธ์๋ง ์ผ์น ์ํจ๋ค. ๋ฌด์์ด๋ ์ผ์น์ํค๋ ค๋ฉด param๋ฐ๋ก ๋ค์ ๊ดํธ ์์ ์ ๊ท์(regexp
)์ ์ฌ์ฉํ ์ ์๋ค.
//404 Not found
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: NotFoundView,
},
์ค์ ์ฑ UI๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๋จ๊ณ๋ก ์ค์ฒฉ ๋ ์ปดํฌ๋ํธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. URL์ ์ธ๊ทธ๋จผํธ๊ฐ ์ค์ฒฉ ๋ ์ปดํฌ๋ํธ์ ํน์ ๊ตฌ์กฐ์ ์ผ์นํ๋ค๋ ๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์ด๋ค.
//์ค์ฒฉ Router
{
path: '/nested',
name: 'NestedView',
component: NestedView,
children: [
{
//๊ธฐ๋ณธ nested๋ฅผ ํด๋ฆญ ํ์ ๋ ์ฒ์ ๋ณด์ฌ์ง๋ ํ์ด์ง ์ค์
path: '',
name: 'NestedHome',
component: NestedHomeView,
},
{
path: 'one', // /nested/one
name: 'NestedOne',
component: NestedOneView,
},
{
path: 'two', // /nested/two
name: 'NestedTwo',
component: NestedTwoView,
},
],
},