'route'에 해당되는 글 2건

  1. 2019.12.30 중첩된 라우트
  2. 2019.12.30 Vue Router

실제 앱 UI는 일반적으로 여러 단계로 중첩 된 컴포넌트로 이루어져 있습니다. URL의 세그먼트가 중첩 된 컴포넌트의 특정 구조와 일치한다는 것은 매우 일반적입니다. 예를 들면 다음과 같습니다.

/user/foo/profile                     /user/foo/posts
+------------------+                  +-----------------+
| User             |                  | User            |
| +--------------+ |                  | +-------------+ |
| | Profile      | |  +------------>  | | Posts       | |
| |              | |                  | |             | |
| +--------------+ |                  | +-------------+ |
+------------------+                  +-----------------+

vue-router를 사용하면 중첩 된 라우트 구성을 사용하여이 관계를 표현하는 것이 매우 간단합니다.

이전 장에서 만든 앱을 생각해보십시오.

<div id="app">
  <
router-view></router-view>
</
div>

const User = {
  template:
'<div>User {{ $route.params.id }}</div>'
}

const router = new VueRouter({
  routes: [
    { path:
'/user/:id', component: User }
  ]
})

여기에있는 <router-view>는 최상위 outlet입니다. 최상위 경로와 일치하는 컴포넌트를 렌더링합니다. 비슷하게 렌더링 된 컴포넌트는 자신의 중첩 된 <router-view>를 포함 할 수도 있습니다. 다음은 User컴포넌트의 템플릿 안에 하나를 추가하는 예 입니다.

const User = {
  template:
`
    <div class="user">
      <h2>User {{ $route.params.id }}</h2>
      <router-view></router-view>
    </div>
  `

}

이 중첩 outlet에 컴포넌트를 렌더링하려면 children을 사용해야합니다. VueRouter 생성자의 옵션 config:

const router = new VueRouter({
  routes: [
    { path:
'/user/:id', component: User,
      children: [
        {
          // /user/:id/profile 과 일치 할 때
          // UserProfile은 User의 <router-view> 내에 렌더링 됩니다.
          path:
'profile',
          component: UserProfile
        },
        {
          // /user/:id/posts 과 일치 할 때
          // UserPosts가 User의 <router-view> 내에 렌더링 됩니다.
          path:
'posts',
          component: UserPosts
        }
      ]
    }
  ]
})

/로 시작하는 중첩 된 라우트는 루트 경로로 취급됩니다. 이렇게하면 중첩 된 URL을 사용하지 않고도 컴포넌트 중첩을 활용할 수 있습니다.

여러분이 볼 수 있듯이 children 옵션은 routes와 같은 라우트 설정 객체의 또 다른 배열입니다. 따라서 필요한만큼 중첩 된 뷰를 유지할 수 있습니다.

이 시점에서, 위의 설정으로, /user/foo를 방문했을 때 하위 라우트가 매치되지 않았기 때문에 User의 outlet에 아무것도 출력되지 않습니다. 어쩌면 거기에 무언가를 렌더링하고 싶을지도 모릅니다. 이 경우 빈 서브 루트 경로를 제공 할 수 있습니다.

const router = new VueRouter({
  routes: [
    {
      path:
'/user/:id', component: User,
      children: [
        // UserHome은 /user/:id 가 일치 할 때
        // User의 <router-view> 안에 렌더링됩니다.
        { path:
'', component: UserHome },

// ...또 다른 서브 라우트
      ]
    }
  ]
})

이 예제의 작업 데모는 이 곳에서 찾을 수 있습니다.

 

출처: <https://router.vuejs.org/kr/guide/essentials/nested-routes.html>

 

Posted by 철냄비짱
,

Vue Router

Front-End/Vue.js 2019. 12. 30. 08:04

참고자료

라우팅이란?

라우팅이란 웹 페이지의 간의 이동방법을 의미합니다. 싱글 페이지 애플리케이션(SPA)은 이동할 페이지를 미리 받아놓고, 페이지를 이동할 때 라우팅을 이용해서 화면을 갱신합니다.

Vue Router는 1) URL에 따라 보여줄 컴포넌트를 연결해 놓고, 2) 해당 URL로 이동했을때 연결된 컴포넌트를 보여줍니다.

1. Vue Router 설치

npm i vue-router --save

설치를 하면 package.json의 dependencies에 vue-router가 추가됩니다.

(dependencies에 포함되는 라이브러리는 앱의 비지니스 로직을 담당하기 때문에 배포할 때도 포함됩니다.)

// 경로: root/package.json

"dependencies": {
    "vue": "^2.5.21",
    "vue-router": "^3.0.2"
  },

2. 컴포넌트 생성

이동했을 때 보여줄 컴포넌트 2개 1) Main.vue, 2) NewsView.vue를 생성합니다.

// 경로: root/view/main.vue

<template>
   
<div>
        Main
   
</div>
</template>

// 경로: root/view/NewsView.vue

<template>
   
<div>
        NewsView
   
</div>
</template>

3. 연결

url과 컴포넌트를 연결해줍니다.

// 경로: root/routes/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Main from '../views/Main.vue'
import NewsView from '../views/NewsView.vue'

Vue.use(VueRouter)

export const router = new VueRouter({
    routes
: [
       
{
            path
: '/',
            component
: Main
       
},
       
{
            path
: '/news',
            component
: NewsView
       
}
   
]
}) 

4. router 등록

Vue 인스턴스에 작성한 router를 등록해줍니다.

// 경로: root/src/main.js

import Vue from 'vue'
import App from './App.vue'
import { router } from '../routes/index.js'

Vue.config.productionTip = false

new Vue({
  render
: h => h(App),
  router
, // ES6 문법으로, 키, 값이 같은면 하나만 작성해도 됩니다. router: router 와 같습니다
}).$mount('#app')

5. 이동

컴포넌트가 보여지는 영역

<router-view> 페이지 표시 태그로 변경되는 url에 따라 컴포넌트를 뿌려주는 영역입니다.

페이지 이동 방식

- 선언적 방식

<router-link to="URL"> 페이지 이동 태그, 화면에서는 <a>로 표시되며 클릭하면 to에 지정한 URL로 이동합니다.

- 프로그래밍 방식

router.push("URL")

먼저 '선언적 방식' 을 사용해볼께요

App.vue 내용을 수정해서 <router-view>, <router-link> 를 작성해줍니다.

// 경로: root/src/App.vue

<template>
 
<div id="app">
   
<router-link to="/">main</router-link> |
   
<router-link to="/news">news</router-link>
   
<router-view></router-view>
 
</div>
</template>

<script>

export default {
  name
: 'app',
}
</script>

<style>
#app {
 
text-align: center;
}
</style>

확인해보면

1) router-link 태그가 a태그로 변경되었습니다. 2) /news로 이동하면, <router-view></router-view> 를 작성한 영역에 URL에 등록한 NewsView 컴포넌트가 보여집니다.

마지막으로 프로그래밍 방식을 사용해보면!!

App.vue 내용을 다음과 같이 수정합니다.

<template>
 
<div id="app">
   
<span @click="go('/')">main</span> | <!-- 클릭하면 go 함수가 실행됩니다.-->
   
<span @click="go('/news')">news</span>
   
<router-view></router-view>
 
</div>
</template>

<script>

export default {
  name
: 'app',
  methods
: {
    go
( targetName) { // 인자값으로 받은 url을 router.push함수에 전달하고 이동됩니다.
     
this.$router.push(targetName)
   
}
 
}
}
</script>

<style>
#app {
 
text-align: center;
}
</style>

span태그를 클릭하면, router-view 아래에 등록된 컴포넌트가 보여집니다.

0개의 댓글

 

출처: <https://velog.io/@skyepodium/Vue-Router-fijr95dn4j>

 

Posted by 철냄비짱
,