개인 프로젝트/예약 시스템 개발하기

예약 시스템 개발하기 02. Router

going.yoon 2022. 1. 31. 20:20

 

뷰에서는 라우터를 통해  뷰 파일과 url 을 연결해주는 기능을 제공한다.

뷰 예제에서는 보통 App.vue에 직접 라우터 경로를 임포트 하고, 해당 라우터 객체를 뷰인스턴스의 변수로 사용했다. 아래의 코드처뤔.

<body>
    <div id="app"></div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> <!--라우터 관련 파일 임포트-->
    <script>
        var rt = new VueRouter({ // 라우터 인스턴스 생성 후 변수에 담아줌

        });

        new Vue({
            el: '#app' ,
            router : rt // 뷰 인스턴스에 라우터 인스턴스 넣어줌
        });
    </script>
</body>

 

 

 

하지만, 대형 프로젝트에서는 이렇게 하지 않고 index.js라는 파일을 통해 라우터를 한꺼번에 관리한다.

$mkdir router
$cd router
$vi index.js

를 통해 router라는 디렉토리를 하나 만들고, index.js라는 파일을 생성해주었다.

 

프로젝트 구조는 다음과 같아졌다.

- src

 - components

  - router

     - index.js

  - App.vue

 

main.js에서 우선 설정을 해준다.

// 1. main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router' //라우터 임포트
import vuetify from './plugins/vuetify'


new Vue({
    el: '#app',
    router, // 뷰 인스턴스 초기화값에 router 변수 넣어줌.
    vuetify,
    render: h => h(App)
})

 

그리고 index.js파일에 라우터를 임포트 해주고, Vue.use를 통해 이 Application에서는 이 파일을 라우터를 쓸 것이다!라고 선언해주면 된다.

import Vue from 'vue'
import Router from 'vue-router'

// #1. 뷰 객체 가져오기
import EnrolClasses from '../components/EnrolClasses.vue'
import Mmbrship from '../components/Mmbrship.vue'
import UserInfo from '../components/UserInfo.vue'
import Notice from '../components/Notice.vue'

Vue.use(Router)

const createRouter = () => new Router({
  mode: 'history',
  routes: [
 // #2. url 과 객체를 연결해준다.
    {
      path : '/',
      name : 'index',
      component : Mmbrship
    },
    {
      path : '/enrolclasses',
      name : 'enrolclasses',
      component : EnrolClasses
    } ,
    {
      path : '/userInfo',
      name : 'userInfo',
      component : UserInfo

    },
    {
      path : '/notice' ,
      name : 'notice',
      component : Notice
    }

  ],
  scrollBehavior () {
    return { x: 0, y: 0 }
  }
})

const router = createRouter()

export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}

export default router

 

#1. 뷰 객체 임포트

프로젝트 구조가 index.js 파일을 기준으로 뷰 객체들은 상위 폴더에 있으므로 파일을 임포트해올 때 '../components~' 로 해준다.

  cf. 하위 디렉토리에 있는 경우 './~' , 동일 디렉토리에 있는 경우 '/~'

 

#2. 객체와 url 맵핑

url은 path, 이름은 name, component에는 임포트해온 뷰 객체의 변수 명을 적어주면된다.

name은 다른 뷰 객체에서 라우터를 호출할 때 사용되니 꼭 적자~!

 

 

 

그럼 다른 뷰 객체에서 라우터를 호출 할 때 어떻게 하는지 알아보자

router.push({ path: 'index.js 내 path변수값' })
router.push({ name: 'index.js 내 name변수값', params: { var1: 12345 , list: {list} }})
router.push({ path: 'index.js 내 path변수값', query: { var1: 12345 , list: {list} }})

이런 방식으로 사용하면 된다.