๊ฐ์ด๋์ ์ํ ์ฝ๋๋ES2015๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Vue.js์ vue-router๋ก ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค. Vue.js๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ปดํฌ๋ํธ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๊ณ ์์ต๋๋ค. vue-router๋ฅผ ์ถ๊ฐ ํ ๋, ์ฐ๋ฆฌ๊ฐํด์ผ ํ ์ผ์ ์ฐ๋ฆฌ์ ์ปดํฌ๋ํธ๋ฅผ route์ ๋งคํํ๊ณ vue-router๊ฐ ์ด๋์ ๋ ๋๋งํ ์ง ์ง์ ํ๋ ๊ฒ์ ๋๋ค. ๋ค์์ ๊ธฐ๋ณธ์ ์ธ ์์ ๋๋ค.
๋ชจ๋ ์์ ๋ Vue์ ์ ์ฒด ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ํ ํ๋ฆฟ ๊ตฌ๋ฌธ ๋ถ์์ ๊ฐ๋ฅํ๊ฒํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ ์์ต๋๋ค.
<scriptsrc="https://unpkg.com/vue/dist/vue.js"></script><scriptsrc="https://unpkg.com/vue-router/dist/vue-router.js"></script><divid="app"><h1>Hello App!</h1><p><!-- ํ์์ ์ํด ๋ผ์ฐํฐ ๋งํฌ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ญ์์ค. --><!-- `to` prop๋ฅผ ์ ๋ฌํ์ฌ ๋งํฌ๋ฅผ ์ง์ ํ์ญ์์ค. --><!-- `<router-link>`๋ ๊ธฐ๋ณธ์ ์ผ๋ก`<a>`ํ๊ทธ๋ก ๋ ๋๋ง ๋ ๊ฒ์
๋๋ค --><router-linkto="/foo">Go to Foo</router-link><router-linkto="/bar">Go to Bar</router-link></p><!-- route outlet --><!-- ๋ผ์ฐํธ์ ์ผ์นํ๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ๊ธฐ ๋ ๋๋ง๋ฉ๋๋ค. --><router-view></router-view></div>
// 0. ๋ชจ๋ ์์คํ
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ (์: vue-cli๋ฅผ ์ด์ฉํด์), Vue ๋ฐ VueRouter๋ฅผ ๊ฐ์ ธ์จ ๋ค์ `Vue.use(VueRouter)`๋ฅผ ํธ์ถํ์ญ์์ค.// 1. ๋ผ์ฐํธ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ์ญ์์ค.// ๋ค๋ฅธ ํ์ผ์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.constFoo={template: '<div>foo</div>'}constBar={template: '<div>bar</div>'}// 2. ๋ผ์ฐํธ๋ฅผ ์ ์ํฉ๋๋ค.// ์ผ๋ถ ๋ผ์ฐํธ ์ ์ ๊ฐ ๋ผ์ฐํธ๋ ์ปดํฌ๋ํธ์ ๋งตํ๋์ด์ผํฉ๋๋ค.// "์ปดํฌ๋ํธ"๋ `Vue.extend()`๋ฅผ ํตํด ์์ฑ๋// ์ค์ ์ปดํฌ๋ํธ ์์ฑ์์ด๊ฑฐ๋ ์ปดํฌ๋ํธ ์ต์
๊ฐ์ฒด ์ผ ์ ์์ต๋๋ค.// ๋์ค์ ์ค์ฒฉ ๋ ๋ผ์ฐํธ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.constroutes=[{path: '/foo',component: Foo},{path: '/bar',component: Bar}]// 3. ๋ผ์ฐํฐ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ `routes` ์ต์
์ ์ ๋ฌํ์ญ์์ค.// ์ฌ๊ธฐ์ ์ถ๊ฐ ์ต์
์ ์ ๋ฌํ ์ ์์ง๋ง, ์ง๊ธ์ ๊ฐ๋จํ๊ฒ ํ๊ฒ ์ต๋๋ค.constrouter=newVueRouter({ routes // routes: routes ์ ์ฝ์ด})// 4. ๋ฃจํธ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ๋ง์ดํธํ์ญ์์ค.// ๋ผ์ฐํฐ ์ต์
์ ๋ผ์ฐํฐ์ ์ฝ์
ํ์ฌ// ์ ์ฒด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ผ์ฐํฐ๊ฐ ์ธ์ํ๋๋ก ํ์ญ์์ค.constapp=newVue({ router }).$mount('#app')// ์ด์ ์ฑ์ ์์ ํด๋ณด์ธ์!
์ด ์์ ๋ฅผ ํ์ธํ์ญ์์ค.
<router-link>
๋ ๊ฐ๋ฆฌํค๋ ๋ผ์ฐํธ๊ฐ ์ผ์น ํ ๋ ์๋์ผ๋ก .router-link-active
ํด๋์ค๋ฅผ ์ป์ต๋๋ค. API ๋ ํผ๋ฐ์ค์์ ๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค.