ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vue.js] 5. 라우팅
    IT&컴퓨터공학/Vue 2021. 3. 5. 11:24

    공식 라우터인 vue-router 를 사용해서 라우팅에 대해 알아보자

     

    vue-router 설치

    npm install vue-router

     

    router 객체 생성

    뷰 인스턴스 생성 객체에는 'router' 라는 속성이 있다.

    Vue router 를 사용하기위해서는 이 속성을 통해 Vue router 객체를 넘겨줘야 한다.

     

    main.js 안에 뷰 인스턴스를 생성하므로 이 안에 넣어주자

    //main.js
    
    import Vue from 'vue'
    import App from './App.vue'
    import router from "./router"
    
    Vue.config.productionTip = false
    
    new Vue({
      render: h => h(App),
      router,
    }).$mount('#app')
    

     

    이제 실제로 라우터 객체를 생성해보자.

    위에서 import router from "./router" 를 통해 ./router 로부터 router 를 가져오므로 router/index.js 에 만들면 되겠다.

    //router/index.js
    
    import Vue from "vue"
    import VueRouter from "vue-router"
    
    // 뷰 어플리케이션에 라우터 플러그인을 추가한다.
    Vue.use(VueRouter)

    그리고 라우팅에 따라 렌더링할 컴포넌트 설정 객체도 정의한다.

    이때 나는 각각의 view 를 views/ 에 별도로 만들어 관리하기로 했다.

    <!--views/viewA.vue-->
    <template>
        <div>
            <p>A view</p>
        </div>
    </template>
    

    이런식으로 B,C 도 생성했다.

     

    마지막으로 VueRouter 클래스 함수로 라우터 객체를 생성한다.

    // router/index.js
    import Vue from "vue"
    import VueRouter from "vue-router"
    
    import viewA from '../views/viewA.vue'
    import viewB from '../views/viewB.vue'
    import viewC from '../views/viewC.vue'
    
    // 뷰 어플리케이션에 라우터 플러그인을 추가한다.
    Vue.use(VueRouter)
    
    
    const router = new VueRouter({
        mode: "history",
        routes: [
          { path: "/", component: viewA }, // '/' 경로로 들어오면 viewA 실행
          { path: "/b", component: viewB }, // '/b' 경로로 들어오면 viewB 실행
          { path: "/c", component: viewC },
        ],
      })
      
    export default router
    • 5 - 7 줄 : import 를 통해 각각의 컴포넌트를 지역적으로 등록한다. 이게 가능한 이유는 모듈 시스템 ( 바벨, 웹펙 ) 을 사용해서 ES2015 문법을 동시에 사용하고 있기 때문이다.
    • 13 - 20 줄
      • mode : 기본값은 "해쉬뱅 모드"다. 브라우져 history 객체의 pushState() API를 사용하기 위해서는 "history"로 모드값을 설정한다.
      • routes : 경로와 컴포넌트으로 이뤄진 컬렉션이다. 실제 이 맵을 보고 라우터가 경로에 따라 그에 맞는 컴포넌트를 렌더링한다. ex ) path: "/"component: viewA } 의 뜻은 경로 '/' 로 가면 viewA라는 컴포넌트를 렌더링 해달라는 뜻이다.

    라우터 뷰

    이제 실제 출력될 부분을 설정해야한다. App.vue 가 루트 컴포넌트 이므로 여기에 라우터 뷰를 추가해보자.

    //App.vue
    
    <template>
      <div id="app">
        <h1>routing example</h1>
        <!-- 라우트 아울렛 -->
        <!-- 현재 라우트에 맞는 컴포넌트가 렌더링됩니다. -->
        <router-view></router-view>
      </div>
    </template>
    
    <script>
    export default {
      name : 'App',
    }
    </script>

     

    그럼 밑처럼 /B 경로로 가면 view B 가 출력되는것을 볼 수 있다.

     

    라우터 링크

    App.vue ( 부모 컴포넌트 ) 에 네비게이션 링크를 걸고싶은 경우엔 <router-link> 를 사용하면 된다. 이때 경로는 'to' 라는 속성을 사용한다.

     

    물론 우리가 아는 <a> 태그를 사용할 수도 있지만, <router-link> 를 사용하면 전체 화면을 갱신하지않고 바뀐 부분만 다시 렌더링 해주기 때문에 <router-link> 를 더 선호한다.

    <template>
      <div id="app">
        <h1>routing example</h1>
    
        <router-link to="/">A</router-link>
        <router-link to="/b">B</router-link>
        <router-link to="/c">C</router-link>
    
        <!-- 라우트 아울렛 -->
        <!-- 현재 라우트에 맞는 컴포넌트가 렌더링됩니다. -->
        <router-view></router-view>
      </div>
    </template>
    
    <script>
    export default {
      name : 'App',
    }
    </script>
    
    
    

     

    'IT&컴퓨터공학 > Vue' 카테고리의 다른 글

    [Vue.js] 6. 라우팅 - 동적 라우팅  (0) 2021.03.05
    [Vue.js] 6. 라우팅 - 중첩된 라우팅  (0) 2021.03.05
    [Vuex]1. Vuex 란 ?  (0) 2021.03.04
    [vue.js] 4. Directive 두번째 v-once  (0) 2021.03.03
    [Vue.js] 3. v-bind/Directive  (0) 2021.03.03

    댓글

Designed by Tistory.