728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
๐ nested routes ์ฌ์ฉํด๋ณด๊ธฐ
- /detail/0/author ๊ฒฝ๋ก๋ก ์ ์ํ๋ฉด, detail ํ์ด์ง ๋ด์ ์์ฑ์๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , /detail/0/comment ๊ฒฝ๋ก๋ก ์ ์ํ๋ฉด detail ํ์ด์ง ๋ด์ ๋๊ธ์ ๋ณด์ฌ์ฃผ๋ ๋ฑ route ๋ก ๋๋ ํ์ด์ง ์์ ๋๋ค์ route ๋ก ๋๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ํน์ ํ์ด์ง ๋ด์ ๋ route ๋ฅผ ๋๋๋ ๊ฒ์ nested routes ๋ผ๊ณ ํ๋ค.
- ๋ฌผ๋ก ๋ชจ๋ฌ์ฐฝ์ฒ๋ผ UI ๋ง๋๋ ๋ฐฉ๋ฒ์ ํ์ฉํด๋ ์ ์ฌํ๊ฒ ๊ตฌํํ ์ ์๊ธด ํ์ง๋ง, ์ด๋ ๊ฒ URL ์ ๋๋ ๋๋ฉด ์์ผ๋ก๊ฐ๊ธฐ ํน์ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ด ๋์ํ๋ค๋ ์ฅ์ ์ด ์๋ค.
- ๋ฐ๋ผ์, ํ์์ ๋ฐ๋ผ nested routes ๋ฅผ ์ฌ์ฉํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๐ค nested routes ์ฝ๋ ์์ฑํ๊ธฐ
// ์ ์ฒด ์ฝ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
// ์ฝ๋ ๋ด์ฉ์ด ๊ธธ์ด ๋ถํ์ํ ๋ถ๋ถ์ ์ ์ธํ๋ค.
import Author from "./components/Author.vue";
import Comment from "./components/Comment.vue";
const routes = [
{
path: "/detail/:id(\\d+)",
component: Detail,
children: [
{
path: "author",
component: Author,
},
{
path: "comment",
component: Comment,
},
],
},
];
- nested routes ์ฝ๋๋ router.js ํ์ผ์ ์์ ๊ฐ์ด children ์ด๋ผ๋ ํญ๋ชฉ์ ๋ง๋ค์ด์ routes ๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
- ๊ทธ๋์ ์์ ๊ฐ์ด ์์ฑํ๋ฉด, /detail/:id/author ๋ก ์ ์ํ๋ฉด Author.vue ๋ฅผ, /detail/:id/comment ๋ก ์ ์ํ๋ฉด Comment.vue ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ ๊ฒ์ด๋ค.
(๋ฌผ๋ก ๊ทธ ์ ์ Author.vue, Comment.vue ์ ๊ฐ์ด ๋ณด์ฌ์ค vue ํ์ผ์ ๋ง๋ค์ด์ import ๋ ํด๋์ด์ผ ํ๋ค.)
๐ค Detail.vue ํ์ผ์ <router-view></router-view> ์ถ๊ฐํ๊ธฐ
<template>
<div class="container mt-4">
<h4>์์ธ ํ์ด์ง</h4>
<h5>{{posts[$route.params.id].title}}</h5>
<p>{{posts[$route.params.id].content}}</p>
<p>{{posts[$route.params.id].date}}</p>
</div>
<router-view></router-view>
</template>
- ์ด์ ์์ ๊ฐ์ด <router-view></router-view> ๋ฅผ ์ํ๋ ์์น์ ์ถ๊ฐํด์ฃผ๋ฉด /detail/:id/author, ํน์ /detail/:id/comment ๋ผ๋ ๊ฒฝ๋ก์ ์ ์ํ์ ๋, ํด๋น ์์น์ Author Component, Comment Component ๋ฅผ ๋ณผ ์ ์๋ ๊ฒ์ด๋ค.
๐ ํ์ด์ง ์ด๋ํด๋ณด๊ธฐ
๐ค $router.push() ์ฌ์ฉํด๋ณด๊ธฐ
$router.push('/detail/0')
- ์์ ๊ฐ์ด $router.push() ํจ์ ์์ ์ด๋ํ๊ณ ์ ํ๋ ๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ฉด, ํ์ด์ง ์ด๋์ด ๊ฐ๋ฅํ๋ค.
- <router-link></router-link> ๋์ ์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฐ, ์ฅ์ ์ ๋ณ์๋ฅผ ์ง์ด๋ฃ์ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๐ค $router.go() ์ฌ์ฉํด๋ณด๊ธฐ
$router.go(-1)
- ์์ ๊ฐ์ด $router.go() ํจ์ ์์ ์ซ์๋ฅผ ๋ฃ์ด ์ฌ์ฉํ๋ฉด ์์ผ๋ก๊ฐ๊ธฐ, ๋ค๋ก๊ฐ๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด 1 ์ด๋ผ๊ณ ์ฐ๋ฉด ์์ผ๋ก 1๋ฒ ๊ฐ๊ณ , -2 ๋ผ๊ณ ์ฐ๋ฉด ๋ค๋ก 2๋ฒ ๊ฐ๋ ์์ด๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] ์๋ฒ๋ก ajax ์์ฒญํ๋ ๋๋ณด๊ธฐ ๋ฒํผ ๋ง๋ค๊ธฐ (0) | 2022.04.06 |
---|---|
[Vue.js] Instagram ํ๋ก์ ํธ ์์ฑํ๊ธฐ ๋ฐ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํ๊ธฐ (0) | 2022.04.06 |
[Vue.js] URL ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ฉํ ์์ธ ํ์ด์ง ๋ง๋ค๊ธฐ (0) | 2022.04.05 |
[Vue.js] vue-router ์ค์น ํ ๋ผ์ฐํ ํ๊ธฐ (0) | 2022.04.05 |
[Vue.js] ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ํตํด ๋ธ๋ก๊ทธ ๊ธ๋ชฉ๋ก ๋ง๋ค๊ธฐ (0) | 2022.04.05 |