3. 라우터 & HTTP 통신
Vue Router
뷰에서 라우팅 기능을 구현할 수 있도록 지원하는 공식 라이브러리
태그 | 설명 |
---|---|
<router-link to="URL 값"> | 페이지 이동 (화면에서는 <a> 로 표현 됨) |
<router-view> | 페이지 표시 태그 (router-link 태그를 클릭하면 router-view 영역이 바뀜) |
- 코드 예제 (링크)
<html>
<head>
<!-- ...중략... -->
</head>
<body>
<!-- ...중략... -->
<!-- 라우터 링크 영역 -->
<router-link to="/main">Main으로 이동</router-link>
<router-link to="/login">Login으로 이동</router-link>
<!-- 라우팅 되는 영역 -->
<router-view></router-view>
<script src="vue CDN"></script>
<script src="vue 라우터 CDN"></script>
<script>
var Main = { template: '<div>main</div>' };
var Login = { template: '<div>login</div>' };
var routes = [
{ path: '/main', component: Main },
{ path: '/login', component: Login },
];
var router = new VueRouter({
mode: 'history',
routes,
});
var app = new Vue({
router,
}).$mount('#app');
</script>
</body>
</html>
$mount() : el 속성과 동일하게 인스턴스를 화면에 붙이는 역할을 하는 API
Nested Router (네스티드 라우터)
한글로 번역하면 중첩 라우터라는 뜻이다.
<router-view>로 보여줄 view 내부에서도 <router-view>를 사용하는 경우를 말한다.
라우팅을 정의할 때 children 속성을 사용하면 된다.
var routes = [
{
path: '/user',
component: User,
children: [
{
path: 'posts', // = /user/posts
component: UserPost,
},
{
path: 'profile', // = /user/profile
component: UserProfile,
},
],
},
];
Named View (네임드 뷰)
네임드 뷰는 같은 레벨에서 여러개의 컴포넌트를 한번에 보여줄 때 사용한다.
<!-- ..중략.. -->
<div id="app">
<router-view name="header"></router-view>
<router-view></router-view>
<router-view name="footer"></router-view>
</div>
<!-- ..중략.. -->
<script>
var Body = { template: '<div>This is Body</div>' };
var Header = { template: '<div>This is Header</div>' };
var Footer = { template: '<div>This is Footer</div>' };
var router = new VueRouter({
routes: [
path: '/',
components: {
default: Body,
header: Header,
footer: Footer
}
]
});
// ..중략..
</script>
Vue HTTP 통신
HTTP는 브라우저와 서버 간에 데이터를 주고받는 통신 프로토콜이다.
뷰 리소스 (vue-resource)
http 통신 관련 라이브러리이다.
axios, fetch 등 대안이 많으므로 굳이 사용하지 않아도 됨
<!-- ..중략.. -->
<body>
<div id="app">
<button @click="getData">프레임워크 목록 가져오기</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-resource@1.3.4"></script>
<script>
new Vue({
el: '#app',
methods: {
getData: function () {
// this.$http.get() : vue resource에서 제공하는 API
this.$http
.get(`https://raw.githubusercontent.com/joshua1988/doit-vuejs/master/data/demo.json`)
.then(function (response) {
console.log(response);
console.log(JSON.parse(response.data));
});
},
},
});
</script>
</body>
Axios
현재 Vue에서 가장 많이 사용되는 HTTP 통신 라이브러리이다.
fetch와 다르게 구형 브라우저를 지원하며, 데이터를 json(객체)형태로 자동 변환해준다.
API 유형 | 처리 결과 |
---|---|
axios.get('url 주소').then().catch() | get요청에 대한 응답을 받는다. |
axios.post('url 주소').then().catch() | post 요청에 대한 응답을 받는다. |
axios({ 옵션 속성 }) | http 요청에 대한 정의를 직접 할 수 있다. |