# ๋ทฐ ๋ผ์ฐํฐ
๋ทฐ ๋ผ์ฐํฐ๋ ๋ทฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ ๋ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
# ๋ทฐ ๋ผ์ฐํฐ ์ค์น
ํ๋ก์ ํธ์ ๋ทฐ ๋ผ์ฐํฐ๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ CDN ๋ฐฉ์๊ณผ NPM ๋ฐฉ์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
# CDN ๋ฐฉ์
<script src="https://unpkg.com/vue-router/dist/vue-router.js">
# NPM ๋ฐฉ์
npm install vue-router
# ๋ทฐ ๋ผ์ฐํฐ ๋ฑ๋ก
๋ทฐ ๋ผ์ฐํฐ๋ฅผ ์ค์นํ๊ณ ๋๋ฉด ์๋ ์ฝ๋์ ๊ฐ์ด ๋ผ์ฐํฐ ์ธ์คํด์ค๋ฅผ ํ๋ ์์ฑํ๊ณ ๋ทฐ ์ธ์คํด์ค์ ๋ฑ๋กํฉ๋๋ค.
// ๋ผ์ฐํฐ ์ธ์คํด์ค ์์ฑ
var router = new VueRouter({
// ๋ผ์ฐํฐ ์ต์
})
// ์ธ์คํด์ค์ ๋ผ์ฐํฐ ์ธ์คํด์ค๋ฅผ ๋ฑ๋ก
new Vue({
router: router
})
# ๋ทฐ ๋ผ์ฐํฐ ์ต์
์์ ๊ฐ์ด ๋ผ์ฐํฐ๋ฅผ ๋ฑ๋กํ๊ณ ๋๋ฉด ๊ทธ ๋ค์์ ํ ์ผ์ ๋ผ์ฐํฐ์ ์ต์ ์ ์ ์ํ๋ ์ผ์ ๋๋ค. ๋๋ถ๋ถ์ SPA ์ฑ์์๋ ์๋์ ๊ฐ์ด 2๊ฐ ์ต์ ์ ํ์๋ก ์ง์ ํฉ๋๋ค.
- routes : ๋ผ์ฐํ ํ URL๊ณผ ์ปดํฌ๋ํธ ๊ฐ ์ง์
- mode : URL์ ํด์ฌ ๊ฐ ์ ๊ฑฐ ์์ฑ
๊ทธ๋ผ ์ ์ต์ ์ผ๋ก ๋ผ์ฐํฐ๋ฅผ ์ ์ํด๋ณด๊ฒ ์ต๋๋ค.
new VueRouter({
mode: 'history',
routes: [
{ path: '/login', component: LoginComponent },
{ path: '/home', component: HomeComponent }
]
})
์ ์ฝ๋๋ ๋ผ์ฐํ
์ ํ ๋ URL์ #
๊ฐ์ ์ ๊ฑฐํ๊ณ , URL ๊ฐ์ด /login
๊ณผ /home
์ผ ๋ ๊ฐ๊ฐ ๋ก๊ทธ์ธ ์ปดํฌ๋ํธ์ ํ ์ปดํฌ๋ํธ๋ฅผ ๋ฟ๋ ค์ค๋๋ค.
# router-view
๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ์ฐฝ์์ URL์ด ๋ณ๊ฒฝ๋๋ฉด, ์์์ ์ ์ํ routes ์์ฑ์ ๋ฐ๋ผ ํด๋น ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๋ฟ๋ ค์ง๋๋ค. ์ด ๋ ๋ฟ๋ ค์ง๋ ์ง์ ์ด ํ
ํ๋ฆฟ์ <router-view>
์
๋๋ค.
<div id="app">
<router-view></router-view> <!-- LoginComponent ๋๋ HomeComponent -->
</div>
์์์ ์ ์ํ ๋ผ์ฐํ
์ต์
๊ธฐ์ค์ผ๋ก /login
์ ๋ก๊ทธ์ธ ์ปดํฌ๋ํธ๋ฅผ /home
์ ํ ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ํ์ํฉ๋๋ค.
# router-link
์ผ๋ฐ์ ์ผ๋ก ์น ํ์ด์ง์์ ํ์ด์ง ์ด๋์ ํ ๋๋ ์ฌ์ฉ์๊ฐ url์ ๋ค ์ณ์ ์ด๋ํ์ง ์์ต๋๋ค. ์ด ๋ ํ๋ฉด์์ ํน์ ๋งํฌ๋ฅผ ํด๋ฆญํด์ ํ์ด์ง๋ฅผ ์ด๋ํ ์ ์๊ฒ ํด์ค์ผ ํ๋๋ฐ ๊ทธ๊ฒ ๋ฐ๋ก <router-link>
์
๋๋ค.
<router-link to="์ด๋ํ URL"></router-link>
์ค์ ์ฝ๋ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<div>
<router-link to="/login"></router-link>
</div>
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ํ๋ฉด์์๋ <a>
ํ๊ทธ๋ก ๋ณํ๋์ ๋์ต๋๋ค. ๋ฐ๋ผ์ <a>
ํ๊ทธ๋ฅผ ํด๋ฆญํ๋ฉด /login
URL๋ก ์ด๋ํฉ๋๋ค.
# ๊ธฐํ ๋ผ์ฐํฐ ์ต์ ๊ณผ ๊ธฐ๋ฒ
์์ ๋ด์ฉ์ผ๋ก๋ ๊ฐ๋จํ ๋ผ์ฐํ ์ ๊ตฌํํ ์ ์์ต๋๋ค. ๊ธฐํ ๋ผ์ฐํฐ API์ ์ค๋ฌด์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ผ์ฐํฐ ์ต์ ๋ค์ ๋ค์ ๋ผ์ฐํฐ ๊ณ ๊ธ ๊ธฐ๋ฒ์์ ์์๋ณด๊ฒ ์ต๋๋ค.
โ Event Emit Axios โ